具有外部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位置更新為
- 在上面的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集群配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 非阻塞io(linux 非阻
- 下一篇: jdk8 cms g1gc_G1 vs