使用SolrJ客户端管理SolrCloud(Solr集群)
- 2019 年 10 月 8 日
- 筆記
1、使用SolrJ客户端管理SolrCloud(Solr集群)。
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集群中添加索引和删除索引效果如下所示:

待续…..