SOLR是最流行且高度可扩展的搜索引擎之一,它基于分布式索引技术运行。 Solr索引几乎可以基于任何类型的数据源(CSV数据或XML数据或从RDBMS数据库或标准文件系统中提取的数据)构建。

对于以RDBMS数据库作为后端构建的任何Web应用程序,如果需要在具有数百万行的表上执行搜索,或者需要执行连接多个表的查询,则可能需要花费大量时间才能完成得到回应。 这种后端服务使网站速度极慢。 在这些情况下,SOLR索引编制可能是有用的解决方案。 SOLR可以以反向索引文档的形式存储数据,该文档包含多个字段,每个字段都有一个名称和值。 SOLR的单个实例通常对于中小型数据库就足够了。 如果大型数据库需要在数十亿行上执行查询,则需要一种分布式索引解决方案,其中索引需要分布在多个分片和群集中。 SOLR云就是为此目的而设计的。 但是,管理SOLR云的节点,分片和副本是一项艰巨的任务,无法手动完成。 与外部Zookeeper集群配对可以通过将查询路由到正确的Solr实例来帮助进行SOLR云管理,以及诸如负载平衡和容错之类的其他好处。

但是,使用外部Zookeeper集成建立SOLR云集群非常复杂,对于开发人员而言似乎是一项艰巨的任务。 在本文中,我们将通过简单的步骤以及必要的代码片段和屏幕快照,讨论使用Zookeeper集群进行Solr云设置和实现。 我们将创建多个SOLR碎片,并通过zookeeper对其进行操作。 后来,通过使用SOLRJ API的spring boot micro服务对设置进行了测试。 SOLRJ是一个API,可帮助Java应用程序与SOLR通信并执行查询。 在下面显示的示例中,我已将Java 8用于JDK和Eclipse作为IDE。

1. Zookeeper设置

以下是设置Zookeeper集成的分步说明:

  • 从URL https://zookeeper.apache.org/releases.html下载最新的Zookeeper

Zookeeper配置

  • 在每个conf文件中,将dataDir位置更新为
server.1=YourServerName:2888:3888
server.2= YourServerName:2889:3889
server.3= YourServerName:2890:3890
  • 在上面的conf文件的dataDir属性中提到的相应位置创建3个文件夹。 ( /opt/user_projects/poc/tmp/1 , /opt/user_projects/poc/tmp/2, /opt/user_projects/poc/tmp/3 )。
  • 在创建的每个文件夹中,制作一个新文件并将其命名为“ myid”,然后根据文件夹名称输入序列号(1或2或3)。
  • 这样就完成了Zookeeper配置。

2. SOLR Cloud设置

现在让我们开始Solr云配置。

  • 从URL http://lucene.apache.org/solr/downloads.html下载最新的Solr。
  • 导航到solr安装文件夹下的服务器目录,并在其中创建4个solr文件夹。 在我的情况下,它是/opt/user_projects/poc/solrpoc/solr-7.4.0/server': solr, solr2, solr3, solr4如下图所示。

Solr配置

  • 上面创建的每个solr文件夹都应具有solr.xml,并且必须在该文件中分配端口,如下所示。
    ${jetty.port:8993}
  • 另外,您应该在同一文件夹中有一个configsets。 如果要使用数据库,则应具有data_driven_schema_configs。
  • 修改端口后。 Solr设置已经准备就绪。

3.启动Zookeeper

  • 在启动Zookeeper之前,请确保已设置JAVA_HOME。
  • 为Zookeeper准备启动和停止脚本,然后将它们放在/opt/user_projects/poc/solrpoc/zookeeper-3.4.12/startZookeeper.shstopZookeeper.sh ,如下所示。

SOLR启动脚本

#!/bin/sh
echo "-----------------------------------"
echo "Starting all Solr Instances"source /opt/sun_jdk/jdkversion/jdkversion.confbin/solr start -Duser.timezone="America/Los_Angeles" -c -s server/solr -p 8993 -z yourServer:8997,yourServer:8998,yourServer:8999 -nopromptbin/solr start -Duser.timezone="America/Los_Angeles" -c -s server/solr2 -p 8994 -z yourServer:8997,yourServer:8998,yourServer:8999 -nopromptbin/solr start -Duser.timezone="America/Los_Angeles" -c -s server/solr3 -p 8995 -z yourServer:8997,yourServer:8998,yourServer:8999 -nopromptbin/solr start -Duser.timezone="America/Los_Angeles" -c -s server/solr4 -p 8996 -z yourServer:8997,yourServer:8998,yourServer:8999 -nopromptecho ""
echo "Started all Solr Instances"
echo "---------------------------------"
  • 为Solr准备启动和停止脚本,并将它们放在/opt/user_projects/poc/solrpoc/solr-7.4.0/startSolr.sh
    执行此脚本时,solr开始在指定的端口上运行。

Solr控制台

4.设置收藏

  • SOLR运行之后,确保将与数据库相关的jar复制到dist并在solrconfig.xml提到该依赖项。

Solr系列

  • 执行完上述创建命令后,您可以转到Solr Admin UI并查看如下所示的集合。

Solr控制台

  • 创建集合后,我们可以如下所示运行Dataimport。 单击执行。

Solr数据导入

这样, SOLR cloud设置就完成了。

5.使用SOLRJ的SPRING BOOT客户端

现在,我们将讨论如何在基于Spring Boot的微服务中测试SOLR集群并使用SOLRJ API查询数据。 我提供了github链接,该链接提供了整个项目代码。

  • 使用以下结构创建一个新的spring boot项目。

项目结构

  • 配置gradle依赖项以包括S​​OLRJ库。

SOLRJ util连接到Zookeeper

@Service
public class SolrUtil {CloudSolrClient solrClient;@SuppressWarnings("deprecation")public CloudSolrClient createConnection(){//You need to replace SERVERNAME with the server on which the zookeeper is runningString zkHostString = "SERVERNAME:8997,SERVERNAME:8998,SERVERNAME:8999"; //- DEVif(solrClient == null){solrClient = new CloudSolrClient.Builder().withZkHost(zkHostString).build();}return solrClient;}public SolrDocumentList getSolrResponse(SolrQuery solrQuery, String collection, CloudSolrClient solrClient) {QueryResponse response = null;SolrDocumentList list = null;try {QueryRequest req = new QueryRequest(solrQuery);solrClient.setDefaultCollection(collection);response = req.process(solrClient);list = response.getResults();} catch (Exception e) {e.printStackTrace();//handle errors in this block}return list;}
}
  • 现在创建一个SolrSearchService,它可以调用查询,更新文档或在SOLR中删除,如下所示。

SOLRJ服务到CRUD Solr文档

@Service
public class SolrSearchService {@AutowiredSolrUtil solrUtil;private static final String collection = "UserSearchCloud";public ResponseVO search(SearchRequestVO requestVO) {CloudSolrClient solrClient = solrUtil.createConnection();String query = requestVO.getQuery();SolrQuery solrQuery = new SolrQuery();solrQuery.setQuery(query);solrQuery.setRows(50);solrQuery.set("collection", collection);solrQuery.set("wt", "json");SolrDocumentList documentList = solrUtil.getSolrResponse(solrQuery, collection, solrClient);ResponseVO responseVO = new ResponseVO();if(documentList != null && documentList.size() >0){responseVO.setDocumentList(documentList);responseVO.setMessage("Success");}else{responseVO.setMessage("Failure");responseVO.setErrorMessage("Records Not Found");}return responseVO;}public ResponseVO update(UpdateRequestVO requestVO) {CloudSolrClient solrClient = solrUtil.createConnection();UpdateResponse response = new UpdateResponse();SolrDocument sdoc1 = null;String id = requestVO.getId();solrClient.setDefaultCollection(collection);SolrInputDocument sdoc = new SolrInputDocument();try {sdoc1 = solrClient.getById(id);} catch (SolrServerException e1) {e1.printStackTrace();} catch (IOException e1) {e1.printStackTrace();}if(sdoc1 != null){sdoc.setField("FIRST_NAME",requestVO.getFirstName() != null ? requestVO.getFirstName() : sdoc1.get("FIRST_NAME"));sdoc.setField("WORK_EMAIL",requestVO.getWorkEmail() != null ? requestVO.getWorkEmail() : sdoc1.get("WORK_EMAIL"));sdoc.setField("LAST_NAME",requestVO.getLastName() != null ? requestVO.getLastName() : sdoc1.get("LAST_NAME"));sdoc.setField("ADDRESS1",requestVO.getAddress1() != null ? requestVO.getAddress1() : sdoc1.get("ADDRESS1"));sdoc.setField("ADDRESS2",requestVO.getAddress2() != null ? requestVO.getAddress2() : sdoc1.get("ADDRESS2"));sdoc.setField("PHONE1",requestVO.getPhone1() != null ? requestVO.getPhone1() : sdoc1.get("PHONE1"));sdoc.setField("JOB_TITLE",requestVO.getJobTitle() != null ? requestVO.getJobTitle() : sdoc1.get("JOB_TITLE"));sdoc.setField("COMPANY_NAME",requestVO.getCompanyName() != null ? requestVO.getCompanyName() : sdoc1.get("COMPANY_NAME") );sdoc.setField("CITY",requestVO.getCity() != null ? requestVO.getCity() : sdoc1.get("CITY"));sdoc.setField("PHONE2",requestVO.getPhone2() != null ? requestVO.getPhone2() : sdoc1.get("PHONE2"));sdoc.setField("USER_NAME",requestVO.getUserName() != null ? requestVO.getUserName() : sdoc1.get("USER_NAME"));sdoc.setField("id",sdoc1.get("id"));sdoc.setField("_version_","0");try {solrClient.add(sdoc);response = solrClient.commit();} catch (SolrServerException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}ResponseVO responseVO = new ResponseVO();if(response != null && response.getResponse() != null){responseVO.setMessage("Document Updated");}else{responseVO.setErrorMessage("Document Not Found");}return responseVO;}public ResponseVO delete(DeleteRequestVO requestVO) {CloudSolrClient solrClient = solrUtil.createConnection();UpdateResponse response = new UpdateResponse();try {solrClient.setDefaultCollection(collection);response = solrClient.deleteById(requestVO.getId());} catch (SolrServerException e1) {e1.printStackTrace();} catch (IOException e1) {e1.printStackTrace();}ResponseVO responseVO = new ResponseVO();if(response != null){responseVO.setMessage("Document Deleted");}return responseVO;}}
  • 最后,您可以在启动Spring Boot服务之后从任何其他客户端测试服务。

休息客户测试

这样就完成了整个端到端测试。

6.下载源代码

这是一个使用Zookeeper集成配置SOLR云并通过基于Spring boot的SOLRJ项目访问它的示例。

下载
您可以在这里下载该项目的完整源代码: SOLRJ-ZOOKEEPER-INTEGRATION

翻译自: https://www.javacodegeeks.com/2018/08/solr-cloud-7-4-cluster-configuration-external-zookeeper-ensemble-using-solrj-api-access-data.html

具有外部Zookeeper集成并使用SOLRJ API访问数据的SOLR cloud 7.4集群配置相关推荐

  1. Linux系统运维之Zookeeper集群配置

    一.简介 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.ZooKeeper的目标就是封装好复杂易 ...

  2. zookeeper集群配置与配置文件详解

    1.配置文件解读 tickTime=2000 //leader和follower之间心跳检测时间 initLimit=10 //初始化连接次数是10次,和第一个配置连在一起意思就是10*2000 20 ...

  3. 18_clickhouse副本同步与高可用功能验证,分布式表与集群配置,数据副本与复制表,ZooKeeper整合,创建复制表,副本同步机制,数据原子写入与去重,负载平衡策略,案例(学习笔记)

    24.副本同步与高可用功能验证 24.1.分布式表与集群配置 24.2.数据副本与复制表 24.3.ZooKeeper整合 24.4.创建复制表 24.5.副本同步机制 24.6.数据原子写入与去重 ...

  4. Elasticsearch集群配置以及REST API使用

    ES安装与启动 在官网下载压缩包,解压后直接运行bin目录下的.bat文件即可.下载地址戳这里. ES配置集群 Elasticsearch配置集群很简单,只要配置一个集群的 名称 ,ES就会自动寻找并 ...

  5. 记录 zookeeper集群配置参数 flume配置参数

    1.zookeeper zookeeper作为大数据集群的最基础的服务组件,许多集群服务都需要zookeeper集群的稳定并且高效的运行.那么对于zookeeper集群的基本参数理解就是不可避免的了. ...

  6. Linux系统Zookeeper集群配置

    2019独角兽企业重金招聘Python工程师标准>>> Zookeeper版本:zookeeper-3.4.8.tar.gz 下载安装 用户:root 解压 [root@localh ...

  7. linux 集群服务器设置,Zookeeper集群配置

    安装 cd /usr/local/src tar zxvf zookeeper-3.4.5.tar.gz mv zookeeper-3.4.5 /usr/local/zookeeper chown - ...

  8. zookeeper 日志查看_zookeeper 安装和集群配置

    1.首先安装jdk 2.安装zookeeper 2-1.下载zookeeper安装包 http://apache.fayea.com/zookeeper/stable/ 2-2.解压安装包 tar - ...

  9. 在虚拟机中搭建设zookeeper集群配置

    zookeeper集群的介绍网上很多我在这里主要给大家介绍一下虚拟机的创建以及zookpper的配置(附带有相关的文件) 1.我们就首先创建一下虚拟机 图1 2. 3. 4.分享一下链接(https: ...

最新文章

  1. WPF程序中的XPSDocumentViewer
  2. Postman 调试技巧
  3. 迭代加深搜索与埃及分数求解
  4. Java多线程同步机制
  5. lighttpd sqlite3 php,fedora linux平台下搭建lighttpd+php+sqlite
  6. 誉赐 PC阳光板www.ycpc.icoc.cn/详尽概述
  7. ROST_CM6软件之词频分析、社会网络和语义网络分析、情感分析
  8. 记一次勒索病毒攻击事件的处理过程
  9. baidupcsgo安卓_GitHub - orenbek2019/BaiduPCS-Go: 百度网盘客户端 - Go语言编写
  10. Edge(Linux 版)无法正常同步问题解决
  11. win10系统如何配置web服务器,如何在windows10下搭建web服务器
  12. FPGA 之 SOPC 系列(五)Nios II 软件使用与程序开发 I
  13. 手写签名 PNG 制作
  14. Spark优化——推测执行机制
  15. SCI常用词语及技巧 - 易智编译EaseEditing
  16. 10天学安卓-第一天
  17. 手把手教你做树莓派魔镜-MagicMirror(六)-安装MagicMirror
  18. Typora中(Markdown语法)在符号的上方添加符号或文字
  19. 科学家研发独特AI算法:用WiFi监测你是否在做梦
  20. AIPNet: Image-to-Image Single Image Dehazing with Atmospheric Illumination Prior

热门文章

  1. 【DP】奖励卡(jzoj 3937)
  2. 初一级模拟试题总结(2019.3.2)
  3. Sentinel(一)之简介
  4. JDK8之新特性扩展篇
  5. Spring Boot Debug调试
  6. 跳跃表(Skip list)原理与java实现
  7. 接口 Closeable
  8. java实现遍历树形菜单方法——TreeAction实现
  9. 调用反射类的指定方法
  10. 高效的SQLSERVER分页查询