日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/3 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 具有外部Zookeeper集成并使用SOLRJ API访问数据的SOLR cloud 7.4集群配置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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.sh和stopZookeeper.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集群配置的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。