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

待续…..