1、将Solr打包到tomcat中
1.1、将Solr下dist/solr.war放入tomcat中:
1.2、将Solr/example/lib/ext 下面所有依赖的包打包到tomcat中:
2、配置Solr的数据库
2.1、将 Solr/example/ 中的solr下的所有文件放到指定位置:
2.2、通过修改solr工程中的web.xml文件,使其与solrhome关联起来
将<en-entry-value/>标签中的值改为solrhome的绝对路径即可
3、安装IK中文分词器
3.1、将IK分词器的jar包放入到solr工程
3.2、在WEB-INF目录下创建classes目录,放入IK分词器的配置文件
3.3、配置solrhome/collection1/conf/schema.xml 文件
<!--配置IK分词器 --> <fieldType name="text_ik" class="solr.TextField"> <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/> </fieldType>
4、配置IK分词器的域
4.1、配置域
4.1.1、在solrhome/collection1/conf/schema.xml 文件中,配置:(相当于MySql中的创建表)
<!-- 配置域 存入到solr表的结构 --> <field name="item_goodsid" type="long" indexed="true" stored="true"/> <field name="item_title" type="text_ik" indexed="true" stored="true"/> <field name="item_brand" type="text_ik" indexed="true" stored="true"/> <field name="item_category" type="string" indexed="true" stored="true"/> <field name="item_price" type="double" indexed="true" stored="true"/> <field name="item_image" type="string" indexed="false" stored="true"/> <field name="item_seller" type="text_ik" indexed="true" stored="true"/> <field name="item_updatetime" type="date" indexed="true" stored="true"/>
4.1.2、绑定java.pojo中相对应的数据
//因为id是solr中自定义的域,所以无需指定 @Field private Long id; @Field("item_title") private String title; @Field("item_price") private BigDecimal price; @Field("item_image") private String image; @Field("item_updatetime") private Date updateTime; @Field("item_goodsid") private Long goodsId; @Field("item_category") private String category; @Field("item_brand") private String brand; @Field("item_seller") private String seller;
4.2、设定复制域 (即设定特殊的搜索格式,搜索的关键字将应用于其下的复制域中)
<!-- 复制域 搜索的逻辑,不需要存在数据库中 --> <field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/> <copyField source="item_title" dest="item_keywords"/> <copyField source="item_category" dest="item_keywords"/> <copyField source="item_seller" dest="item_keywords"/> <copyField source="item_brand" dest="item_keywords"/>
4.3、设置动态域
4.3.1、在solrhome/collection1/conf/schema.xml 文件中,配置:
<!-- 动态域 --> <dynamicField name="item_spec_*" type="string" indexed="true" stored="true"/>
4.3.2、在对应的java.pojo中配置:
//添加动态域 @Dynamic @Field("item_spec_*") private Map<String,String> specMap; public Map<String, String> getSpecMap() { return specMap; } public void setSpecMap(Map<String, String> specMap) { this.specMap = specMap; }
item_spec_* 中的“ * ”会自动匹配Map中的key值
5、solr结合spring的demo
5.1、在Spring中的配置
<!-- 服务器地址 --> <solr:solr-server id="solrServer" url="http://192.168.XXX.XXX:8080/solr"/> <!-- 操作solr的模板 --> <bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate"> <constructor-arg name="solrServer" ref="solrServer"></constructor-arg> </bean>
5.2、一些简单操作
public class SolrUtil { @Autowired private TbItemMapper tbItemMapper; @Autowired private SolrTemplate solrTemplate; public List<TbItem> selectFromMysql() { TbItemExample example = new TbItemExample(); Criteria criteria = example.createCriteria(); criteria.andStatusEqualTo("1"); List<TbItem> list = tbItemMapper.selectByExample(example); return list; } public void save() { List<TbItem> list = selectFromMysql(); //增加规格 for(TbItem tbItem:list) { Map specMap = JSON.parseObject(tbItem.getSpec(),Map.class); tbItem.setSpecMap(specMap); } solrTemplate.saveBeans(list); solrTemplate.commit(); } public void delete() { Query query = new SimpleQuery("*:*"); solrTemplate.delete(query); solrTemplate.commit(); } public static void main(String[] args) { ApplicationContext app = new ClassPathXmlApplicationContext("classpath*:spring/applicationContext-*.xml"); SolrUtil solrUtil = (SolrUtil) app.getBean("solrUtil"); /*solrUtil.save();*/ solrUtil.delete(); } }