Solr是在schema.xml(managed-schema)中配置Analyzer。
注意:在Solr 6.1.0的conf文件夹下没有schema.xml这个文件,只有managed-schema,如果把managed-schema删掉,然后放schema.xml,那么运行时候会根据schema.xml生成managed-schema,如果这两个文件同时存在,则会只根据managed-schema的内容配置。
在没有配置word分词器之前,schema.xml里面默认用的是WhitespaceTokenizerFactory,就是根据空格来分词,对于中文来说则是将文本分为一个个单字,对一篇新闻分词后的结果如下:

下面配置word分词:
将schema.xml中的需要用到Word分词的fieldType中的:
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
和
<tokenizer class="solr.StandardTokenizerFactory"/>
替换为:
<tokenizer class="org.apdplat.word.solr.ChineseWordTokenizerFactory"/>
并移除下面的filter标签.
如text_general类型:
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true">
<analyzer type="index">
<tokenizer class="org.apdplat.word.solr.ChineseWordTokenizerFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.apdplat.word.solr.ChineseWordTokenizerFactory"/>
</analyzer>
</fieldType>
将word-1.3.jar放到lib文件夹下,重启solr,可以看到分词效果如下:

另外,在conf文件夹下面发现有很多txt文件:

这是用来设置停止词,或者是同义词的。
例如在利用word分词后,查询“下跌”,得到结果如下:

查询“下降”是没有结果的:

在synonyms.txt配置:
下降=>下跌
或者设置为:
下降,下跌
前者表示为将下降转换为下跌,后者表示这些词可以相互替换。
另外,还要记得在相应的fieldType加上对同义词的支持:
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true">
<analyzer type="index">
<tokenizer class="org.apdplat.word.solr.ChineseWordTokenizerFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.apdplat.word.solr.ChineseWordTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
</analyzer>
重启solr之后再查询“下降”:

通过上面的例子可以看出,通过配置conf文件夹下面的文件,可以对solr进行很多个性化的设置,solr的功能还是很强大的。
word分词器:https://github.com/ysc/word
网友评论