SolrCloud+tomcat7+ookeeper集群配

solrCloud的主要功能:

主要功能包括强大的全文搜索,点击显示,面搜索,动态聚类,数据库集成,丰富的文件(如Word,PDF)处理,和空间搜索,而且他具有高度的可扩展性,提供容错的分布式搜索和索引。

     1)集中式的配置信息     2)自动容错     3)近实时搜索     4)查询时自动负载均衡

图1. Collection大致结构图

![osjp-vertx-fig1-thumb-100159570-orig](https://v1cdn.imspm.com/imspm.com超级产品经理2016072200ypjqg1q2rpz.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](https://v1cdn.imspm.com/imspm.com超级产品经理20160722003dxyn5adgmw.png)

二、分别修改solr_home_1、solr_home_2、solr_home_3下面的solr.xml。

        ${host:}        ${jetty.port:8080}//端口分别对应tomcat的端口        ${hostContext:solr}        ${zkClientTimeout:30000}        ${genericCoreNodeNames:true}      ${socketTimeout:0}      ${connTimeout:0}其他solr.xml同理。

三、分别进入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:2181set JAVA_OPTS=-Dsolr.home=d:/solrCloud/solr_home_2 -DzkHost=127.0.0.1:2181set 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:\solrCloud\zk-server_1\conf\zoo.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](https://v1cdn.imspm.com/imspm.com超级产品经理20160722002mpmisfrx3y.png)下面我们启动zk_server1、zk_server2、zk_server3.如下图:

图4:

![osjp-vertx-fig1-thumb-100159570-orig](https://v1cdn.imspm.com/imspm.com超级产品经理2016072200sempeltekvt.jpg)启动时,第一个报错是因为找不到其他两个zk,才会报错。这都是不要紧的,三个启动好了就不会报错了。下面我们在启动tomcat-server_1、tomcat-server_2、tomcat-server_3。

图5:

![osjp-vertx-fig1-thumb-100159570-orig](https://v1cdn.imspm.com/imspm.com超级产品经理20160722000qnydxoldtu.jpg)

图6:

![osjp-vertx-fig1-thumb-100159570-orig](https://v1cdn.imspm.com/imspm.com超级产品经理2016072200nufmxvyrihc.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", "王五");        Collection docs = 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,尊重原创作者的劳动成果~ 谢谢配合~

关键字:java, 全文检索, solrcloud, 分布式


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部