经过几天的研究终于搞定了solr的拼音搜索,现在把经验分享给大家!
一、首先需要准备3个jar包,pinyinAnalyzer4.3.1.jar 、pinyin4j-2.5.0.jar、lucene-analyzers-smartcn-5.2.1.jar ,将这三个jar包放到
/solr-5.2.1/server/solr-webapp/webapp/WEB-INF/lib 这个目录下。lucene-analyzers-smartcn-5.2.1.jar 这个jar在/solr-5.2.1/contrib/analysis-extras/lucene-libs
这个目录下面有,直接COPY过去就行了。另外2个自己去网上下载就行了。
二、在managed-schema.xml(又叫schema) 中加入下面几段配置:
<field name="pinyin" type ="text_pinyin" indexed ="true" stored ="false" multiValued ="true"/>
到这里我们的配置还有没完成呢,还要在managed-schema里加几个copyFiled
<copyField source="name" dest="pinyin"/>
<copyField source="brandName" dest="pinyin"/>
然后managed-schema.xml里设置分词器:
<fieldType name="text_pinyin" class="solr.TextField" positionIncrementGap="0">
<analyzer type="index">
<tokenizer class="solr.SmartChineseSentenceTokenizerFactory"/>
<filter class="solr.SmartChineseWordTokenFilterFactory"/>
<filter class="com.shentong.search.analyzers.PinyinTransformTokenFilterFactory" minTermLenght="2" />
<filter class="com.shentong.search.analyzers.PinyinNGramTokenFilterFactory" minGram="1" maxGram="20" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.SmartChineseSentenceTokenizerFactory"/>
<filter class="solr.SmartChineseWordTokenFilterFactory"/>
<filter class="com.shentong.search.analyzers.PinyinTransformTokenFilterFactory" minTermLenght="2" />
<filter class="com.shentong.search.analyzers.PinyinNGramTokenFilterFactory" minGram="1" maxGram="20" />
</analyzer>
</fieldType>
(这个分词器要注意了,网上跟多的配置是针对solr3.X或4.X的版本的,用这个可能会出问题。这个只针对5.X版本)
就是这么简单,2个步骤搞定。然后需要重新上传配置到ZK里,重新启动solr服务。并且,需要dataimport里重新全量导入初始化数据。