摘要:的主要功能主要功能包括強大的全文搜索,點擊顯示,面搜索,動態聚類,數據庫集成,豐富的文件如,處理,和空間搜索而且他具有高度的可擴展性,提供容錯的分布式搜索和索引。端口分別對應的端口其他同理。這都是不要緊的,三個啟動好了就不會報錯了。
solrCloud的主要功能:
主要功能包括強大的全文搜索,點擊顯示,面搜索,動態聚類,數據庫集成,豐富的文件(如Word,PDF)處理,和空間搜索,而且他具有高度的可擴展性,提供容錯的分布式搜索和索引。
1)集中式的配置信息 2)自動容錯 3)近實時搜索 4)查詢時自動負載均衡
圖1. Collection大致結構圖
![osjp-vertx-fig1-thumb-100159570-orig](http://7xvmgi.com1.z0.glb.clouddn.com/1.png)
1、下載https://zookeeper.apache.org/ 2、下載http://lucene.apache.org/solr/ 3、下載http://tomcat.apache.org/下面我就開始學習之旅:
首先復制三個tomcat例如: tomcat-server_1 端口:8080 tomcat-server_2 端口:8090 tomcat-server_3 端口:8100
一、在分別復制solr-4.7.0下面的example/webapps的solr.war解壓復制到tomcat-server_1、tomcat-server_2、tomcat-server_3的webapp下面為solr,分別創建三個文件夾分別為solr_home_1、solr_home_2、solr_home_3作為存放solr的數據。將solr-4.7.0下面example/solr/分別復制到solr_home_1、solr_home_2、solr_home_3下面。
圖2:
![osjp-vertx-fig1-thumb-100159570-orig](http://7xvmgi.com1.z0.glb.clouddn.com/2.png)
二、分別修改solr_home_1、solr_home_2、solr_home_3下面的solr.xml。
其他solr.xml同理。 ${host:} ${jetty.port:8080} //端口分別對應tomcat的端口${hostContext:solr} ${zkClientTimeout:30000} ${genericCoreNodeNames:true} ${socketTimeout:0} ${connTimeout:0}
三、分別進入tomcat-server_1、tomcat-server_2、tomcat-server_3 下面的webapp下面的solr,然后去改WEB-INF下的web.xml,分別為下面的清單:
solr/home D:/solrCloud/solr_home_1 //定義solr索引所存的地址java.lang.String solr/home D:/solrCloud/solr_home_2 //定義solr索引所存的地址java.lang.String solr/home D:/solrCloud/solr_home_3 //定義solr索引所存的地址java.lang.String
四、分別在tomcat-server_1、tomcat-server_2、tomcat-server_3的bin下面的catalina.bat的添加
set java_opts=-Dsolr.home=d:/solrCloud/solr_home_1 -Dbootstrap_confdir=D:/solrCloud/solr_home_1/collection1/conf -Dcollection.configName=myconf -DnumShards=2 -DzkHost=127.0.0.1:2181 set JAVA_OPTS=-Dsolr.home=d:/solrCloud/solr_home_2 -DzkHost=127.0.0.1:2181 set JAVA_OPTS=-Dsolr.home=d:/solrCloud/solr_home_3 -DzkHost=127.0.0.1:2181
五、復制三個zoo例如:
zk-server_1 端口:2181 zk-server_2 端口:2182 zk-server_3 端口:2183 在zk-server_1、zk-server_2、zk-server_3下面分別建立兩個文件夾為data和logs用來存儲數據和日志。 分別再data目錄下面創建myid,里面分別寫1、2、3。 配置D:solrCloudzk-server_1confzoo.cfg如下: dataDir=D:/solrCloud/zk-server_1/data dataLogDir=D:/solrCloud/zk-server_1/logs clientPort=2181 server.1=127.0.0.1:2888:3888 server.2=127.0.0.1:2889:3889 server.3=127.0.0.1:2890:3890 其他兩個配置如同上面配置。
圖3:
![osjp-vertx-fig1-thumb-100159570-orig](http://7xvmgi.com1.z0.glb.clouddn.com/3.png)
下面我們啟動zk_server1、zk_server2、zk_server3.如下圖:
圖4:
![osjp-vertx-fig1-thumb-100159570-orig](http://7xvmgi.com1.z0.glb.clouddn.com/4.jpeg)
啟動時,第一個報錯是因為找不到其他兩個zk,才會報錯。這都是不要緊的,三個啟動好了就不會報錯了。
下面我們在啟動tomcat-server_1、tomcat-server_2、tomcat-server_3。
圖5:
![osjp-vertx-fig1-thumb-100159570-orig](http://7xvmgi.com1.z0.glb.clouddn.com/5.jpeg)
圖6:
![osjp-vertx-fig1-thumb-100159570-orig](http://7xvmgi.com1.z0.glb.clouddn.com/6.png)創建
http://127.0.0.1:8080/solr/admin/collections?action=CREATE&name=collection1&numShards=3&replicationFactor=2&maxShardsPerNode=2&collection.configName=myconf重新加載接口
http://127.0.0.1:8080/solr/admin/collections?action=RELOAD&name=collection1刪除
http://127.0.0.1:8080s/solr/admin/collections?action=DELETE&name=collection1
清單1. SolrCloud.java
import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.Map; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServer; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.CloudSolrServer; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.SolrInputDocument; public class SolrCloud { private static CloudSolrServer cloudSolrServer; private static synchronized CloudSolrServer getCloudSolrServer(final String zkHost) { if (cloudSolrServer == null) { try { cloudSolrServer = new CloudSolrServer(zkHost); } catch (Exception e) { e.printStackTrace(); } } return cloudSolrServer; } //添加索引 private void addIndex(SolrServer solrServer) { try { SolrInputDocument doc1 = new SolrInputDocument(); doc1.addField("id", "421245251215121452521251"); doc1.addField("title", "張三"); SolrInputDocument doc2 = new SolrInputDocument(); doc2.addField("id", "4224558524254245848524243"); doc2.addField("title", "李四"); SolrInputDocument doc3 = new SolrInputDocument(); doc3.addField("id", "4543543458643541324153453"); doc3.addField("title", "王五"); Collectiondocs = new ArrayList (); docs.add(doc1); docs.add(doc2); docs.add(doc3); solrServer.add(docs); solrServer.commit(); } catch (SolrServerException e) { System.out.println("Add docs Exception !!!"); e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { System.out.println("Unknowned Exception!!!!!"); e.printStackTrace(); } } // 搜索 public void search(SolrServer solrServer, String String) { SolrQuery query = new SolrQuery(); query.setQuery(String); try { QueryResponse response = solrServer.query(query); SolrDocumentList docs = response.getResults(); for (SolrDocument doc : docs) { for (Map.Entry entry : doc) { System.out.println(entry.getKey()+"="+entry.getValue()); } } } catch (SolrServerException e) { e.printStackTrace(); } catch (Exception e) { System.out.println("Unknowned Exception!!!!"); e.printStackTrace(); } } //刪除 public void deleteAllIndex(SolrServer solrServer) { try { solrServer.deleteByQuery("*:*");// delete everything! solrServer.commit(); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { System.out.println("Unknowned Exception !!!!"); e.printStackTrace(); } } public static void main(String[] args) { final String zkHost = "127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183"; final String defaultCollection = "collection1"; final int zkClientTimeout = 20000; final int zkConnectTimeout = 1000; CloudSolrServer cloudSolrServer = getCloudSolrServer(zkHost); System.out.println("The Cloud SolrServer Instance has benn created!"); cloudSolrServer.setDefaultCollection(defaultCollection); cloudSolrServer.setZkClientTimeout(zkClientTimeout); cloudSolrServer.setZkConnectTimeout(zkConnectTimeout); cloudSolrServer.connect(); System.out.println("The cloud Server has been connected !!!!"); SolrCloud test = new SolrCloud(); test.addIndex(cloudSolrServer); test.search(cloudSolrServer, "id:*"); test.deleteAllIndex(cloudSolrServer); test.search(cloudSolrServer, "id:*"); System.out.println("hashCode"+test.hashCode()); cloudSolrServer.shutdown(); } }
相關閱讀
使用Vert.x構建Web服務器和消息系統
RABBITMQ在分布式系統的應用
作者信息
作者系力譜宿云 LeapCloud 團隊_云服務研發成員:JinYang Zhang
首發地址:https://blog.maxleap.cn/archives/977
歡迎關注微信訂閱號:從移動到云端(MaxLeap - 讓移動開發更快速 )
歡迎加入我們的力譜宿云 LeapCloud 活動QQ群:555973817,我們將不定期做技術分享活動。
若有轉載需要,請轉發時注意自帶作者信息一欄并本自媒體公號:力譜宿云 LeapCloud,尊重原創作者的勞動成果~ 謝謝配合~
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/64953.html
摘要:今天整理了一下近大半年以來的一些文章,和我的預期一樣,很多文章我都忘記自己曾經寫過了,這個記錄的過程讓我也有了新的理解。希望大家,收藏,點贊,加轉發。 今天整理了一下近大半年以來的一些文章,和我的預期一樣,很多文章我都忘記自己曾經寫過了,這個記錄的過程讓我也有了新的理解。希望大家,收藏,點贊,加轉發。 面試必備 面試必備:深入Spring MVC DispatchServlet 源碼...
摘要:今天整理了一下近大半年以來的一些文章,和我的預期一樣,很多文章我都忘記自己曾經寫過了,這個記錄的過程讓我也有了新的理解。希望大家,收藏,點贊,加轉發。 今天整理了一下近大半年以來的一些文章,和我的預期一樣,很多文章我都忘記自己曾經寫過了,這個記錄的過程讓我也有了新的理解。希望大家,收藏,點贊,加轉發。 面試必備 面試必備:深入Spring MVC DispatchServlet 源碼...
摘要:作為面試官,我是如何甄別應聘者的包裝程度語言和等其他語言的對比分析和主從復制的原理詳解和持久化的原理是什么面試中經常被問到的持久化與恢復實現故障恢復自動化詳解哨兵技術查漏補缺最易錯過的技術要點大掃盲意外宕機不難解決,但你真的懂數據恢復嗎每秒 作為面試官,我是如何甄別應聘者的包裝程度Go語言和Java、python等其他語言的對比分析 Redis和MySQL Redis:主從復制的原理詳...
閱讀 3730·2021-10-11 10:59
閱讀 1318·2019-08-30 15:44
閱讀 3489·2019-08-29 16:39
閱讀 2898·2019-08-29 16:29
閱讀 1813·2019-08-29 15:24
閱讀 818·2019-08-29 15:05
閱讀 1272·2019-08-29 12:34
閱讀 2354·2019-08-29 12:19