【发布时间】:2013-07-09 14:24:44
【问题描述】:
我很确定 solr 可以设置为在搜索期间识别同义词。我想知道是否可以对昵称做同样的事情——例如,搜索“Robert”会提取包含“Bob”的记录。
【问题讨论】:
我很确定 solr 可以设置为在搜索期间识别同义词。我想知道是否可以对昵称做同样的事情——例如,搜索“Robert”会提取包含“Bob”的记录。
【问题讨论】:
刚刚找到一个名为 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>
【讨论】: