solr4.8之solrcloud的使用与日常问题解决
http://blog.sina.com.cn/s/blog_a2f090ae0102v4fx.html
将对应的java代码打包成jar上传到服务器上启动后台运行代码:(进入到:/home/solr/solr-script/lib)
nohup java cn.people.solr.index.Indexer -d article -c hdfs -n article_no_conpyfield -p hdfs://10.38.11.1:9000/data_center/article/year=2014/month=08/000000_0 &
nohup java cn.people.solr.index.Indexer -d article -c hdfs -n article_no_conpyfield -p hdfs://10.38.11.1:9000/data_center/article/year=2014/month=08/000000_0 &
nohup java cn.people.solr.index.Indexer -c rabbitmq -d article -n article_new &
[nohup ... & : 表示挂起到后台服务器上去执行,这下你就可以关闭你的客户端和电脑了]
【注意】运行java代码需要提前配置好java相关的参数,即在linux中的/etc/profile,如果在运行的时候报找不到对应的类,那是因为你缺少相关的jar包,需要将相应的jar包放到与你这个类的jar包同一个位置下即可,或是放到其他地方,写一个shell脚本去执行也是可以的。正常时写一个脚本去自动加载所需要的jar包,而这个脚本是交给supervisor进行管理(这样的话即使某个时候有问题线程断掉了,supervisor也会进行自动重启)。具体有什么不会的可以与我联系。
==================================在服务器部署和运行时的总结内容
如果已经创建好了一个名为article_new,但是想改为article_merge的名字,则只需要按照下面的命令进行链接修改即可。
【链接新的schmal地址:】
/data/solr-4.8.0/node/scripts/cloud-scripts/zkcli.sh -zkhost 10.38.11.102:2181 -cmd linkconfig -collection article_new -confname article_merge
我自己安装的对应的supervisor具体位置:
/home/solr/deploy/supervisor
访问:http://10.38.11.102:9001
其中对应的schema.xml是存放在/data/solr-conf/
创建Clound的时候,需要上传到服务器上生成相应的集群包,即:
article:
/data/solr-4.8.0/node/scripts/cloud-scripts/zkcli.sh -zkhost 10.38.11.102:2181 -cmd upconfig -confdir /data/solr-conf/article-merge -confname article_recent
weibo:
/data/solr-4.8.0/node/scripts/cloud-scripts/zkcli.sh -zkhost 10.38.11.102:2181 -cmd upconfig -confdir /data/solr-conf/weibo-recent -confname weibo_recent
Epaper:
/data/solr-4.8.0/node/scripts/cloud-scripts/zkcli.sh -zkhost solr6 -cmd upconfig -confdir /data/solr-conf/epaper-recent -confname epaper-new
其中,zkcli.sh为zookeeper的脚本,10.38.11.102:2181为zookeeper主机,其中2181为其端口号。-confdir后面指代的是要上传solr的schemal.xml的地址,-confname后面指代的是上传后solrcloud的名字
【之后就可以在浏览器上输入:】
http://10.38.11.102:8983/solr/admin/collections?action=CREATE&name=article_recent&numShards=3&replicationFactor=2&maxShardsPerNode=2即创建了名称为:article_recent,有3个分片2个复制因子的solrcloud,其中maxShardsPerNode=2默认值为1,即表示每个分片上最大复制数,那么我现在需要创建两个复制因子,那么我给其赋值为2即可,当然,你也可以赋值3、4等。
如果schema中的属性有变动,只需要将正确的schema上传到服务器上之后重启solr即可(这里的重启不是说重启zookeeper等,是在浏览器中输入重启命令即可,即:http://10.38.11.102:8983/solr/admin/collections?action=RELOAD&name=weibo_recent)
如果我需要创建两个分片,需要有两个复制因子,并且我要指定在哪台服务器上创建,那么测试需要用到关键字:createNodeSet了,它可以指定要创建的集群列表。
createNodeSet的作用是:创建集群中指定ip为分片,举例具体操作示例如下:
admin/collections?action=CREATE&name=epaper&numShards=1&replicationFactor=2&maxShardsPerNode=2&createNodeSet=10.38.11.130:8983_solr,10.38.11.127:8983_solr
具体的createNodeSet后面的名称可以在Cloud--Tree--/live_nodes下的列表中参考(在当前文件夹内可以查看“指定SolrCloud的shard.jpg”来寻找对应的类表信息),如下如所示:
【删除clound的时候】,需要通过:http://10.38.11.102:8983/solr/admin/collections?action=DELETE&name=article_merger
之后为了安全起见,需要到相应的集群上对应的位置将刚删除的clound文件夹删除,以便下次创建同名的时候可以创建成功!
具体路径以我本机为例:/data/solr-4.8.0/node/solr/
问题解决:
1.当出现Illegal directory问题是,可以在命令中通过:ll 错误地址 来查看对应的地址是否有问题
2.当在浏览器上执行一些命令时,如果有问题,到logging中去查看对应的问题内容并结合文档列表来解决
3.对应schema.xml中field="username"去掉之后,重新上传创建对应的SolrClound会报错!
根据报错信息可以发现,对应的username在copyfiled中也存在,而对应的copyfield为多个字段合并字段,故不能再在上面出现。
可以将对应的copyfield="username"去掉即可。
4.如果在创建schema的时候,有些字段不需要索引也不需要存储,则不需要再schema.xml中体现,因为这个字段查询或是做操作的时候都不会被用到,
而且如果多写上的话在网络传输的时候会增加额外的带宽消耗以及额外的增加所占的索引内存并营销搜索效率。
5.在创建好的schema中有些字段的类型是:string,而有些为text_zh,其中text_zh为自己后加的即新增加的中文分词内容。这两个类型就有说法了,分别
对应为:精确匹配和分词匹配。举例说明:假如我要输入“人民日报”关键词,如果是精确匹配,则只会搜索出有关人民日报的所有内容,而如果是分词匹配,
则会搜索出有关人民网、人民日报等各种分词组合后不同的词组的信息。
6.当solr的schema发生变化了之后,需要将改动后的schema.xml上传到zookeeper集群环境上,并且需要到solr集群上运行reload进行重启即可
http://localhost:8983/solr/admin/collections?action=RELOAD&name=epaper-new
8.写完webService的服务端之后需要生成相应的客户端进行测试
打开cmd,进入到你想要生成代码的位置,之后运行:wsdl2java 你自己的wsdl地址,例如我的是:
D:\java_workSpace\newProject\paperwebservice\src\cn\people\solr\searcher\client>wsdl2java http://192.168.1.107:8080/paperwebservice/PaperService?wsdl