十、Spring Data for Apache Solr
1.Spring Data简介
Spring Data 是Spring的顶级项目。里面包含了N多个二级子项目,每个子项目对应一种技术或工具。其目的为了让数据访问更加简单,更加方便的和Spring进行整合。
Spring Data 项目如果单独使用是还需要配置XML配置文件的,当和Spring Boot整合后使用起来非常方便。spring-boot-starter-data-xx就是对应的启动器。
2.实现步骤
2.1添加依赖
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-solr</artifactId> </dependency> </dependencies>
2.2编写配置文件
spring: data: solr: host: http://192.168.9.132:8080/solr # zk-host: 192.168.9.132:2181,192.168.9.132:2182,192.168.9.132:2183
2.3编写测试类
@RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = MyApplication.class) public class MyTest { @Autowired private SolrTemplate solrTemplate; public void testInsert(){ SolrInputDocument doc = new SolrInputDocument(); doc.setField("id","002"); doc.setField("item_title","这是一个手机3"); UpdateResponse ur = solrTemplate.saveBean("collection1", doc); if(ur.getStatus()==0){ System.out.println("成功"); }else{ System.out.println("失败"); } solrTemplate.commit("collection1"); } public void testDelete(){ UpdateResponse ur = solrTemplate.deleteByIds("collection1", "change.me"); if(ur.getStatus()==0){ System.out.println("成功"); }else{ System.out.println("失败"); } solrTemplate.commit("collection1"); } public void query(){ SimpleQuery query = new SimpleQuery(); Criteria c = new Criteria("item_keywords"); c.is("手机"); query.addCriteria(c); query.setOffset(1L); query.setRows(1); ScoredPage<DemoPojo> sp = solrTemplate.queryForPage("collection1", query, DemoPojo.class); System.out.println(sp.getContent()); } @Test public void queryHL(){ List<DemoPojo> listResult = new ArrayList<>(); SimpleHighlightQuery query = new SimpleHighlightQuery(); //设置查询条件 Criteria c = new Criteria("item_keywords"); c.is("手机"); query.addCriteria(c); //分页 query.setOffset(0L); query.setRows(10); //排序 Sort sort = new Sort(Sort.Direction.DESC,"id"); query.addSort(sort); //高亮设置 HighlightOptions hlo = new HighlightOptions(); hlo.addField("item_title item_sell_point"); hlo.setSimplePrefix("<span style='color:red;'>"); hlo.setSimplePostfix("</span>"); query.setHighlightOptions(hlo); HighlightPage<DemoPojo> hl = solrTemplate.queryForHighlightPage("collection1", query, DemoPojo.class); // System.out.println(hl.getContent()); List<HighlightEntry<DemoPojo>> highlighted = hl.getHighlighted(); for(HighlightEntry<DemoPojo> hle : highlighted){ List<HighlightEntry.Highlight> list = hle.getHighlights(); DemoPojo dp = hle.getEntity(); for (HighlightEntry.Highlight h : list){//一个对象里面可能多个属性是高亮属性 if(h.getField().getName().equals("item_title")){ dp.setItem_title( h.getSnipplets().get(0)); } } listResult.add(dp); } System.out.println(listResult); } }
十一. 使用zookeepr管理solr集群
1.上传压缩包到/usr/local/tmp 下 并解压。
2.在 /usr/local下新建文件夹 zookeeper
# mkdir /usr/local/zookeeper
3.把解压的所有文件复制到zookeeper下, 并命名为zk1
# cp -r /usr/local/temp/zookeeper-3.4.8 /usr/local/zookeeper/zk1
4.在zk1下新建文件夹 data
5.在data下新建文件 myid, 里面写上 1
# vim myid
6.进入到zk1/conf 下 把 zoo_sample.cfg 复制一份叫做 zoo.cfg
7.编辑 zoo.cfg 内容,设置 dataDIR为 data文件夹, 并在文件最下面添加下面内容
server.1=192.168.93.10:2688:3888 server.2=192.168.93.10:2689:3889 server.3=192.168.93.10:2690:3890
7.1 server.1中的1是myid的内容
7.2 2688 2689 2690 是 zookeeper内部端口
7.3 3888 3889 3890 是 leader端口
8.把zk1复制两份,分部叫做 zk2 zk3 并修改 myid 的值为 2,3 修改zoo.cfg中 dataDIR和clientPort
9.启动三个zookeeper
# ./zkServer.sh start
10.查看状态
# ./zkServer.sh status