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集群中添加索引和删除索引效果如下所示:
待续.....