杭州专业网站建设公司哪家好,wordpress商城 中文站,小学生ppt模板免费下载,自己做网站卖什么名字SOLR是最流行且高度可扩展的搜索引擎之一#xff0c;它基于分布式索引技术运行。 Solr索引几乎可以基于任何类型的数据源#xff08;CSV数据或XML数据或从RDBMS数据库或标准文件系统中提取的数据#xff09;构建。 对于以RDBMS数据库作为后端构建的任何Web应用程序#xf… 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.1YourServerName: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.sh和stopZookeeper.sh 如下所示。 SOLR启动脚本 #!/bin/sh
echo -----------------------------------
echo Starting all Solr Instancessource /opt/sun_jdk/jdkversion/jdkversion.confbin/solr start -Duser.timezoneAmerica/Los_Angeles -c -s server/solr -p 8993 -z yourServer:8997,yourServer:8998,yourServer:8999 -nopromptbin/solr start -Duser.timezoneAmerica/Los_Angeles -c -s server/solr2 -p 8994 -z yourServer:8997,yourServer:8998,yourServer:8999 -nopromptbin/solr start -Duser.timezoneAmerica/Los_Angeles -c -s server/solr3 -p 8995 -z yourServer:8997,yourServer:8998,yourServer:8999 -nopromptbin/solr start -Duser.timezoneAmerica/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依赖项以包括SOLRJ库。 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