使用SolrJ客户端管理SolrCloud(Solr集群)
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集群中添加索引和删除索引效果如下所示:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?