关于solr的一些总结和问题

在这里插入图片描述
关于solr的一些总结和问题

今天是2018年的第一天,目前已经工作一年了,项目也在不断的“升级”,写的东西越来越多,偶尔总结一下,也算是一种学习吧。休息了几天,今天把前段时间关于Solr的一些问题总结一下。

在之前自己搭过单机版的solr,网上教程很多,随便百度一个就可以搭的很好,在实际运用中,我使用了Solr4.10.3(比较老,但是目前够用)。

使用时的问题

  1. solr4.10.3中文分词,不支持智能中文分词
  2. 利用solrJ生成索引时多次报错
  3. 利用solrJ生成索引时报错对应的结果
  4. solrCloud搭建时与Zookeeper的搭配
  5. 利用url命令创建solrCloud的shards及replacations时,实际与想法不同
  6. 后续问题持续更新。。。

对问题的处理及记录

  1. solr4.10.3目前不支持只能中文分词(smar_ik),但是网上也有针对4.*的解决方案。目前是,修改了IK的jar(还没有看修改了哪),再修改schema.xml(经测试,可以进行智能分词,即分词的粒度相对于之前的text_ik比较大)。后续有需要,我会尝试研究修改的IK.jar。

修改之前:

<fieldType name="text_ik" class="solr.TextField">
	<analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
	<analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType> 

修改之后:

<fieldType name="text_ik" class="solr.TextField"  
    positionIncrementGap="100">  
    <analyzer type="index">  
        <tokenizer class="org.wltea.analyzer.lucene.IKAnalyzerSolrFactory" isMaxWordLength="false" />  
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopword.dic" enablePositionIncrements="true" />  
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />  
            <filter class="solr.LowerCaseFilterFactory" />  
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0"  splitOnCaseChange="1"/>     
    </analyzer>  
    <analyzer type="query">  
        <tokenizer class="org.wltea.analyzer.lucene.IKAnalyzerSolrFactory" isMaxWordLength="true" />  
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopword.dic" enablePositionIncrements="true" />  
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />  
        <filter class="solr.LowerCaseFilterFactory" />  
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0"  splitOnCaseChange="1"/>     
    </analyzer>  
</fieldType>  
<!-- 引用智能分词 -->  
<fieldType name="smart_ik" class="solr.TextField">  
    <analyzer >  
        <tokenizer class="org.wltea.analyzer.lucene.IKAnalyzerSolrFactory" isMaxWordLength="true" /><!-- 智能分词 -->  
    </analyzer>  
</fieldType>  
<!-- 引用最细粒 -->  
<fieldType name="tiny_ik" class="solr.TextField">  
    <analyzer >  
        <tokenizer class="org.wltea.analyzer.lucene.IKAnalyzerSolrFactory" isMaxWordLength="false" /><!-- 最细粒分词 -->  
    </analyzer>  
</fieldType>  
2. 生成索引时,可以利用xml的形式,配置dataImport.xml来生成索引,由于1.数据量不是很大,2.而且数据的格式不是很规范(在数据的规范上有一定的问题)3.之前利用dataImport需要多次刷新。所以此时和java建立联系,利用SolrJ来生成索引。生成索引之前需要配置,schema.xml将需要的字段都写在对应的位置。
例:

``` 配置完成后: 配置时required这个属性要注意,是否是唯一标识符,如果写了是true,则在数据中必须不为空,否则会报错 比如导100条数据,如果第50条报错,那么其余的99条会生成索引,只有第50条不会生成索引(此处应该注意,避免重复生成索引) 1. 由于导入的数据来自不同的表,所以不能使用id来作为唯一标识(是否是自增,我还没有测试,稍后更新),使用uuid来替代int类型。此时在修改(即添加操作,如果没有则添加,有则修改,修改时对之前旧的需要保留的数据进行备份,否则以前的旧的属性会被覆盖,所以如果修改一个属性,需要把另外几个属性都复制过来)或删除时,需找到对应的uuid来进行操作 在删除时: ``` UpdateResponse response = cloudSolrServer.deleteById("100002"); System.out.println(response.getQTime()); ``` 可能是版本不对应,response.getQTime()会报错,删掉就可以正常进行删除操作。 4. solr单机版多个core比较不便于操作,如果使用solrClou则方便的多,而且速度有明显的提升。我使用了,3个zookeeper和3个tomcat放SolrCloud,当时没有多想,有这么多服务器,就这么搭配,后续如果需要再研究下性能问题,再来扩充。 5. 利用url命令创建solrCloud的shards及replacations时

http://localhost:8080/solr/admin/collections?action=CREATE&name=credit2&numShards=1&replicationFactor=1&createNodeSet=192.168.10.63:8080_solr,192.168.10.64:8080_solr,192.168.65:8080_solr

先执行一次,再执行一次,才会生成,一个collections,三个shards,三个都是leader,没有replaction,虽然可以使用,但是后续性能可能会有问题,如果需要再进行学习探索。

参考

《solr实战》

总结

后续有机会我会更新上述问题没有的问题,如果有错误的地方,或者可以帮我解决没有解决的疑惑,qq:463782649,备注之后飞速回复。

进入2018年,也算是一个新的开始,希望在程序猿的道路上可以越来越好,梦想得有,万一实现了呢。
在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值