最近在學習solr時候,碰到一個問題,就是如果採用默認的分詞器,會將每個字都分割成一個詞組進行索引
比如:長沙市 會被分詞爲 “長”,“沙”,“市”,這樣就達不到我想要的效果
例如:
<field name="name" type="text_general" indexed="true" stored="true"/>
這個是默認的分詞器
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
我對城市名稱進行索引
結果:
對每個字都進行了分詞
所以這裏我們需要手動加入分詞功能,我這裏採用的IKAnalyzer,這裏分詞,會進行詞組分詞 “長沙”,“市” 這樣
在schema.xml文件中加入
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
<field name="name" type="text_ik" indexed="true" stored="true"/>
然後重啓
這樣效果就達到了,這裏和lucene的差不多滴!