Обучение Solr распознаванию псевдонимов или вариантов имени

Я почти уверен, что solr можно настроить на распознавание синонимов во время поиска. Мне интересно, можно ли сделать то же самое с псевдонимами - например, поиск «Роберт» выведет записи с «Бобом» в них.


person Jordan Reiter    schedule 09.07.2013    source источник


Ответы (1)


Только что нашел страницу, где кто-то по имени Джон Мониачи точно знает, как это сделать: http://bitsandpieces.jonmoniaci.com/2010/05/searching-common-nicknames-in-solr/

По сути, создайте файл синонимов с такими строками:

Bob, Robert, Bobby

(Файл Джона находится здесь, полученный из списка распространенные мужские и женские никнеймы на 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>
person Jordan Reiter    schedule 09.07.2013