训练solr以识别昵称或名称变体

时间:2013-07-09 14:24:45

标签: solr names synonym

我很确定solr可以设置为在搜索过程中识别同义词。我想知道是否可以用昵称做同样的事情 - 所以例如搜索“Robert”会把“鲍勃”记录在其中。

1 个答案:

答案 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>