我很确定solr可以设置为在搜索过程中识别同义词。我想知道是否可以用昵称做同样的事情 - 所以例如搜索“Robert”会把“鲍勃”记录在其中。
答案 0 :(得分:5)
刚刚找到一个名为Jon Moniaci的人确切如何做到这一点: http://bitsandpieces.jonmoniaci.com/2010/05/searching-common-nicknames-in-solr/
基本上,使用如下行创建一个同义词文件:
Bob, Robert, Bobby
(Jon的档案是here,源自http://usefulenglish.ru/上常见的男性和女性昵称列表
保存到english_names.txt
并将以下内容添加到您的solr配置中:
<fieldType name="textEnglishName" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="english_names.txt" ignoreCase="true" expand="true"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>
然后将作者字段指定为textEnglishName
字段:
<fields>
<field name="name" type="textEnglishName" indexed="true" stored="false"/>
</fields>