使用SolrJ客户端管理SolrCloud(Solr集群)

2019-09-29 11:14:18 浏览数 (1)

1、使用SolrJ客户端管理SolrCloud(Solr集群)。

代码语言:javascript复制
  1 package com.taotao.search.service;
  2 
  3 import java.io.IOException;
  4 import java.util.ArrayList;
  5 
  6 import org.apache.solr.client.solrj.SolrQuery;
  7 import org.apache.solr.client.solrj.SolrServerException;
  8 import org.apache.solr.client.solrj.impl.CloudSolrServer;
  9 import org.apache.solr.client.solrj.response.QueryResponse;
 10 import org.apache.solr.client.solrj.response.UpdateResponse;
 11 import org.apache.solr.common.SolrDocument;
 12 import org.apache.solr.common.SolrDocumentList;
 13 import org.apache.solr.common.SolrInputDocument;
 14 import org.junit.Before;
 15 import org.junit.Test;
 16 
 17 /**
 18  * 使用SolrJ客户端管理SolrCloud(Solr集群)
 19  * 
 20  * @ClassName: SolrJToSolrCloud.java
 21  * @author: biehl
 22  * @since: 2019年9月15日 上午9:33:42
 23  * @Copyright: ©2019 biehl 版权所有
 24  * @version: 0.0.1
 25  * @Description:
 26  */
 27 public class SolrJToSolrCloud {
 28 
 29     // zookeeper地址
 30     private static String zkHostString = "192.168.110.142:2181,192.168.110.142:2182,192.168.110.142:2183";
 31     // collection默认名称,比如我的solr服务器上的collection是collection2_shard1_replica1,就是去掉“_shard1_replica1”的名称
 32     private static String defaultCollection = "collection2";
 33 
 34     // cloudSolrServer实际
 35     private CloudSolrServer cloudSolrServer;
 36 
 37     // 测试方法之前构造 CloudSolrServer
 38     @Before
 39     public void init() {
 40         cloudSolrServer = new CloudSolrServer(zkHostString);
 41         cloudSolrServer.setDefaultCollection(defaultCollection);
 42         cloudSolrServer.connect();
 43     }
 44 
 45     /**
 46      * 向solr集群中添加索引
 47      */
 48     @Test
 49     public void solrCloudAddDocument() {
 50         try {
 51             // 1、创建一个CloudSolrServer对象,构造方法中需要指定zookeeper的地址列表
 52             // String zkHost =
 53             // "192.168.110.142:2181,192.168.110.142:2182,192.168.110.142:2183";
 54             // zookeeper是solr集群的入口,这里只需要连接zookeeper即可。
 55             // CloudSolrServer cloudSolrServer = new CloudSolrServer(zkHost);
 56             // 2、需要设置默认的Collection
 57             // String collection = "collection2";
 58             // 设置默认的collection
 59             // cloudSolrServer.setDefaultCollection(collection);
 60             // 3、创建一个文档对象
 61             SolrInputDocument solrInputDocument = new SolrInputDocument();
 62             // 4、向文档中添加域
 63             // 向文档中添加的域,必须在schema.xml配置文件中定义。
 64             solrInputDocument.addField("id", "1008612");
 65             // 集群中使用的配置文件是zookeeper统一管理的配置文件。
 66             // 如果修改了schema.xml配置文件,使用zkCli.sh脚本命令重新上传conf目录即可,将配置文件进行覆盖。
 67             solrInputDocument.addField("title", "the title phone is xiaomi 9 s.");
 68             solrInputDocument.addField("author", "biehl");
 69             // 5、把文档写入索引库
 70             cloudSolrServer.add(solrInputDocument);
 71             // 6、提交
 72             cloudSolrServer.commit();
 73         } catch (SolrServerException e) {
 74             e.printStackTrace();
 75         } catch (IOException e) {
 76             e.printStackTrace();
 77         }
 78     }
 79 
 80     // 向solrCloud上创建索引
 81     @Test
 82     public void createIndexToSolrCloud() throws SolrServerException, IOException {
 83         SolrInputDocument document = new SolrInputDocument();
 84         document.addField("id", "100001");
 85         document.addField("title", "李四");
 86         cloudSolrServer.add(document);
 87         cloudSolrServer.commit();
 88 
 89     }
 90 
 91     // 搜索索引
 92     @Test
 93     public void searchIndexFromSolrCloud() throws Exception {
 94         // 创建一个solrQuery对象
 95         SolrQuery query = new SolrQuery();
 96         // 搜索出全部的内容
 97         query.setQuery("*:*");
 98         try {
 99             // 返回查询结果,响应结果和查询结果
100             QueryResponse response = cloudSolrServer.query(query);
101             SolrDocumentList docs = response.getResults();
102 
103             System.out.println("文档个数:"   docs.getNumFound());
104             System.out.println("查询时间:"   response.getQTime());
105 
106             // 遍历查询结果
107             for (SolrDocument doc : docs) {
108                 @SuppressWarnings("unchecked")
109                 ArrayList<String> title = (ArrayList<String>) doc.getFieldValue("title");
110                 String id = (String) doc.getFieldValue("id");
111                 System.out.println("id: "   id);
112                 System.out.println("title: "   title);
113                 System.out.println();
114             }
115         } catch (SolrServerException e) {
116             e.printStackTrace();
117         } catch (Exception e) {
118             System.out.println("Unknowned Exception!!!!");
119             e.printStackTrace();
120         }
121     }
122 
123     // 删除索引
124     @Test
125     public void deleteIndexFromSolrCloud() throws SolrServerException, IOException {
126         // 根据id删除
127         UpdateResponse response = cloudSolrServer.deleteById("000001");
128         // 根据多个id删除
129         // cloudSolrServer.deleteById(ids);
130         // 自动查询条件删除
131         // cloudSolrServer.deleteByQuery("title:the title phone is xiaomi 9 x.");
132         // 提交
133         cloudSolrServer.commit();
134     }
135 
136 }

注意:集群中使用的配置文件是zookeeper统一管理的配置文件。如果修改了schema.xml配置文件,使用zkCli.sh脚本命令重新上传conf目录即可,将配置文件进行覆盖。

向solr集群中添加索引和删除索引效果如下所示:

待续.....

0 人点赞