专栏首页别先生使用SolrJ客户端管理SolrCloud(Solr集群)

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

待续.....

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用SolrJ(即java客户端)开发Solr。

    1、什么是SolrJ呢?   答:Solrj是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过SolrJ的AP...

    别先生
  • SpringBoot的自动配置

    1、根据条件来装配bean,SpringBoot的自动配置,根据条件进行自动配置。

    别先生
  • RabbitMQ与Spring的框架整合之Spring Boot实战

    首先创建maven项目的RabbitMQ的消息生产者rabbitmq-springboot-provider项目,配置pom.xml配置文件,如下所示:

    别先生
  • Django入门(1)

    py3study
  • 专访施振荣:大陆是国际化的练兵场

    文:罗超 一手缔造硬件航母宏碁集团的施振荣,刚刚迈入70岁,见证并参与整个计算机时代的他被称为台湾科技教父。在PC大势衰落的大环境之下,这位活化石如何看待PC、...

    罗超频道
  • MySQL 用 limit 分页为什么会影响性能?

    原文链接:https://dwz.cn/K1Q1cePW

    业余草
  • MySQL 证明为什么用limit时,offset很大会影响性能

    链接:https://github.com/zhangyachen/zhangyachen.github.io/issues/117

    用户2769421
  • Basemap系列教程:自定义colormap

    matplotlib colormap非常强大,比其他软件要更好用 [注1],但是相当难理解。大多数时候,可以使用颜色列表创建 colormap:

    bugsuse
  • MySQL的Limit 性能差?真的不能再用了?

    我们知道,当limit offset rows中的offset很大时,会出现效率问题:

    IT大咖说
  • OpenStack命令删除网络

    删除网络 [root@controller ~]# openstack network delete 1a339f6e-7496-4ea9-aa29-144cd...

    院长技术

扫码关注云+社区

领取腾讯云代金券