电商网站中查询商品通常会用到搜索引擎,solr就是其中一种.今天讲一下solr的安装和SpringDataSolr运用,solr是建立在Lucene上的,可以说是它的应用,而SpringDataSolr对Solr进行了封装.
1.下载solr压缩文件,将solr的war(版本4.10.3)放置tomcat的webapp目录下,启动tomcat,会解压solr的jar包.
solr目录如图:
2.将所需要的扩展包放入到WEB-INF的lib目录(如果没有就新建),扩展包如图:
3.将压缩文件中的solr文件夹,作为solrhome,目录如下:
4.修改apache-tomcat-7.0.52webappssolrWEB-INF下的web.xml文件,确定solrhome的位置(有点像maven仓库配置),如图:
5.启动tomcat,访问http://localhost:8080/solr.如图:
6.解压中文分词器,目录如下:
7.将中文分词器jar放置tomcat中solr的WEB-INF/lib目录下,将ext_stopword.dic,IKAnalyzer.cfg.xml,mydict.dic放置WEB-INF/classes目录(没有的话新建该目录)下,如图:
8.修改solrhomecollection1conf目录下schema.xml文件,将中文分词器作为一个新的fieldType,如图:
9.新建我们需要的字段field,字段类型可为text_ik,由于该分词器的jar有点问题,此处不以text_ik测试,如图:
配置基本完成,接下来新建java项目:
10.java工程目录如下 AppTest可以忽略:
1.pom.xml文件:
<?xml version="1.0" encoding="UTF-8"?>4.0.0cn.com.study dandingge 1.0-SNAPSHOTdandinggehttp://www.example.comUTF-81.71.75.1.5.RELEASEorg.springframework spring-context ${spring.version}org.springframework spring-beans ${spring.version}org.springframework spring-webmvc ${spring.version}org.springframework spring-jdbc ${spring.version}org.springframework spring-aspects ${spring.version}org.springframework spring-jms ${spring.version}org.springframework spring-context-support ${spring.version}junit junit 4.12testorg.springframework.data spring-data-solr 1.5.5.RELEASEorg.springframework spring-test 5.1.5.RELEASEtest maven-clean-plugin 3.1.0 maven-resources-plugin 3.0.2 maven-compiler-plugin 3.8.0 maven-surefire-plugin 2.22.1 maven-jar-plugin 3.0.2 maven-install-plugin 2.5.2 maven-deploy-plugin 2.8.2 maven-site-plugin 3.7.1 maven-project-info-reports-plugin 3.0.0
12.applicationContext-solr.xml文件
<?xml version="1.0" encoding="UTF-8"?>
13.MyItem.java文件:
package testSolr;import org.apache.solr.client.solrj.beans.Field;import org.springframework.stereotype.Component;public class MyItem { @Field private long id; //必须有,否则测试时会报错 @Field("my_id") private long myId; @Field("my_name") private String name; public long getId() { return id; } public void setId(long id) { this.id = id; } public long getMyId() { return myId; } public void setMyId(long myId) { this.myId = myId; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
14.TestSolr.java文件
package testSolr;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.solr.core.SolrTemplate;import org.springframework.data.solr.core.query.Criteria;import org.springframework.data.solr.core.query.Query;import org.springframework.data.solr.core.query.SimpleQuery;import org.springframework.data.solr.core.query.result.ScoredPage;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = "classpath*:applicationContext-solr.xml")public class TestSolr { @Autowired private SolrTemplate solrTemplate; @Test public void testCRUD(){ MyItem item = new MyItem(); item.setId(1L); item.setName("张三"); //新增 solrTemplate.saveBean(item); solrTemplate.commit(); //修改 item.setName("李四"); solrTemplate.saveBean(item); solrTemplate.commit(); MyItem myItem = solrTemplate.getById(1, MyItem.class); System.out.println(myItem.getName()); //李四 solrTemplate.deleteById("1"); //删除 solrTemplate.commit(); } @Test public void testQueryPage(){ Query query = new SimpleQuery("*:*"); //查询全部 query.setOffset(2); //起始位置 query.setRows(10); //每页记录数 ScoredPage items = solrTemplate.queryForPage(query, MyItem.class); System.out.println("总记录数" + items.getTotalElements()); System.out.println("记录" + items.getContent()); } @Test public void testPageQueryMutil(){ Query query=new SimpleQuery("*:*"); Criteria criteria=new Criteria("my_name").contains("2"); query.addCriteria(criteria); //query.setOffset(20);//开始索引(默认0) //query.setRows(20);//每页记录数(默认10) ScoredPage page = solrTemplate.queryForPage(query, MyItem.class); } @Test public void testDeleteAll(){ Query query = new SimpleQuery("*:*"); solrTemplate.delete(query); solrTemplate.commit(); //提交 }}
总结:相应的操作都可以在solr界面查看结果. 关于配置 linux和windows大同小异;其他操作,比喻高亮显示,过滤查询等等,都有对应的api;