11月 12

solrcloud 搭建

可参考文章:
http://shiyanjun.cn/archives/100.html
http://distinctplace.com/howto/2014/06/30/dealing-with-multiple-config-sets-in-solrcloud/
 
我,caodan,终于又弄好了新版本的solrcloud,没想到单机转个cloud还这么麻烦,弄了整整两天。
 
首先,之前使用的是solr5.0.0,因为用5.3.0 smartcn组件总是出错,现在我终于给他搞定了。
直接把analysis-extras\lucene-libs\lucene-analyzers-smartcn-5.3.1.jar 复制到 solr_setup\server\solr-webapp\webapp\WEB-INF\lib 下面,注意,不要复制到 solr_setup\server\lib下面,因为那样会导致加载失败。
复制完之后,用中文就很简单了,直接定义fieldtype
    <fieldType name="text_chinese" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.HMMChineseTokenizerFactory"/>
        <filter class="solr.PorterStemFilterFactory"/>
      </analyzer>
    </fieldType>
 
接下来,为了建立solrcloud,需要参考 solr reference book,跟着里面的Setting Up an External ZooKeeper Ensemble那个做。
注意,solr -e 参数只是内置的傻瓜参考样本。没法用于产品的,不要去使用 -e 选项。 -e cloud只是给小白建立example看着玩玩用的。
下面那句话 bin/solr start -cloud -s <path to solr home for new node> -p 8987 -z localhost:2181 才是真材实料的布置环境。
 
好了先说布置 zookeeper,先去下载zookeeper,安装好。
然后配置zoo.cfg,这个好配置,注意clientPort是给solr连接用的,下面 server.1=localhost:2888:3888 的两个端口,是给不同zookeeper之间通信用的。
假设有三个node,同时配置三个zookeeper,有点傻瓜的时必须在syncLimit的时间内把他们同时打开,要不就会同步失败。
 
接下来就用 solr -cloud -z localhost:2181 -p 8983 命令去启动solr去连接zookeeper。
不要去指定 -s 选项,那是用来指定solr home的,如果需要多个solr就多复制几份,不要在一个solr安装目录下弄多个solr home,直接用默认的 solr_setup\server\solr 才靠谱。
可以把每个solr指定到每一个zookeeper上,
solr -cloud -z localhost:2182 -p 8984
solr -cloud -z localhost:2183 -p 8985
 
然后就是创建collection,这真是烦死大爷了,solrcloud的配置文件包括 schema.xml 和 solrconfig.xml 都是上传到 zookeeper进行管理的,不像单机版那样直接配置在本地,所以需要使用如下命令创建collection
 
solr create -c test -d myconf -shards 1 -replicationFactor 1
 
其中 myconf 指的是 solr_sepup\server\solr\configsets\ 下面的一个目录,比如 solr_sepup\server\solr\configsets\myconf,可以参考目录下的其他文件比如 basic_configs 来建立
同时zookeeper上还需要制定一个 configname,这个name默认跟collection name相同,所以上面的命令其实会调用接口

http://localhost:8983/solr/admin/collections?action=CREATE&name=test&numShards=1&replicationFactor=1&maxShardsPerNode=1&collection.configName=test

根据文章说的 http://distinctplace.com/howto/2014/06/30/dealing-with-multiple-config-sets-in-solrcloud/

用命令可以创建单独的configset

zkcli.sh -zkhost localhost:9983 -cmd upconfig -confdir /opt/solr/collection2/conf -confname myconf1

创建collection的时候可以单独指定 collection.configName,假如 configName 已经存在的话,注意这个zkcli必须用solr自带的

 

下面解决一些问题:

1. 恶心的事情,发布solr cloud,遇到问题,解析localhost变成ip 169.254.X.X,

万能的谷歌告诉我们:http://comments.gmane.org/gmane.comp.jakarta.lucene.solr.user/107193

关键看这个网址:http://wiki.apache.org/solr/SolrCloud#SolrCloud_Instance_Params

把 solr.xml 中的host值直接指定

2.zookeeper自带的zkcli是没有solr命令的,solr的zkcli有自己的script。我总是用原始的zkcli一直无法上传configset害死我了,具体看如下网址:

https://cwiki.apache.org/confluence/display/solr/Command+Line+Utilities

The zkcli.sh provided by Solr is not the same as the zkCli.sh included in ZooKeeper distributions !

7月 02

在MyEclipse中调试 solr

1. 首先下载solr源码最新版本

2. 搜索ant安装,在本地安装ant

3. 执行:

ant ivy-bootstrap

ant eclipse

这样就会出现elipse工程 .project 文件,导入到MyEclipse中

4. 安装 run-jetty-run插件

5. 设定 jetty webapp的 run configuration 参数

port: 9983 (用来调试)

Context: /solr (这个与StartSolrJetty类中的设定一致

WebApp dir:/solr/webapp/web (注意,这个要添加一个 /solr,相比于StartSolrJetty中的设定

 

最后,VM arguments要添加一条 -Dsolr.solr.home=/eclipse-build/main/solr 就是solrhome

这个是找了半天从编译后的版本找到的,这个home也可以直接设定为其他真实数据的目录,这样就直接在真实数据上调试。

 

参考文章:http://www.656463.com/article/EzmaYv.htm

但是这篇写的太复杂了,只要完成几步就行,不用配置那些繁琐的过程

————————— 关于如何编译发布 —————————

1. 在源代码根目录运行 ant compile

2. 进入到根目录下的 /solr,运行 ant dist

3. 把原来的solr.war 解压缩,jar -xvf solr.war

4. 用生成的dist中的替换 solr-core 替换 /WEB-INF/lib下面的那个文件,重新压缩 solr.war,

jar   -cvf   ../solr.war   */

4月 03

Solr 问题记录

 1.加载 HttpSolrServer 出现log错误,主要是maven里面没有添加log项,加入如下解决问题

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.7</version>
    </dependency>
    
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
    </dependency>

 

2.加载中文分词

首先 SOLR_HOME/lib 下面可以放需要让solr服务器加载的包,但是由于配置里面没有指定,默认是不会去加载lib的。需要在solrconfig.xml上加一句,<lib dir="E:/XXX/server/lib" regex=".*\.jar" />

这样solr就会去加载lib下面的jar文件。

    <fieldType name="text_chinese" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
      <analyzer>
                <tokenizer class="solr.SmartChineseSentenceTokenizerFactory"/>
                <filter class="solr.SmartChineseWordTokenFilterFactory"/>
      </analyzer>
    </fieldType>

SmartChineseSentenceTokenizerFactory 在 solr-analysis-extras-5.0.0.jar 里面,所有要把包 solr-analysis-extras-5.0.0.jar 拷贝到 lib 目录中

这个问题比较繁琐,现在的解决方式是:

1. 把 configsets 里面的 basic_configs 拷贝到要建立的 core 目录下面

2. 去网页界面里新建 core

3. 修改 solrconfig.xml 中的lib,以及 schema

4. 把下面的jar拷贝到 lib 里面,lucene-analyzers-smartcn-5.0.0.jar,solr-analysis-extras-5.0.0.jar,solr-analytics-5.0.0.jar,solr-core-5.0.0.jar