Замена синонима Solr не удалась? - PullRequest
3 голосов
/ 17 ноября 2011

У меня есть SynonymFilterFactory с использованием файла синонимов.Из документации Solr:

#Explicit mappings match any token sequence on the LHS of "=>"
#and replace with all alternatives on the RHS.  These types of mappings
#ignore the expand parameter in the schema.
#Examples:
i-pod, i pod => ipod,
sea biscuit, sea biscit => seabiscuit

Однако при запросе sea biscuit я получаю результаты, связанные с sea, biscuit и seabiscuit.

Это как будто у меня была следующая конфигурация (с expand="true"):

sea biscuit, sea biscit, seabiscuit

Я не понимаю этого поведения, потому что в инструменте анализа Solr при запросе sea biscuit этозаменен только на seabiscuit.

Другими словами: явное отображение синонимов с => не работает .


Редактировать: конфигурация поля

Tokenized: true

Имя класса: org.apache.solr.schema.TextField

Index Анализатор: org.apache.solr.analysis.TokenizerChain

  • TokenizerКласс: org.apache.solr.analysis.WhitespaceTokenizerFactory

Фильтры:

org.apache.solr.analysis.StopFilterFactory args:{enablePositionIncrements: true words: stopwords.txt ignoreCase: true }
org.apache.solr.analysis.WordDelimiterFilterFactory args:{preserveOriginal: 1 catenateWords: 1 catenateNumbers: 1 splitOnCaseChange: 1 catenateAll: 0 generateNumberParts: 1 generateWordParts: 1 }
org.apache.solr.analysis.LowerCaseFilterFactory args:{}
org.apache.solr.analysis.SnowballPorterFilterFactory args:{protected: protwords.txt }
org.apache.solr.analysis.LengthFilterFactory args:{min: 2 max: 500 }
org.apache.solr.analysis.RemoveDuplicatesTokenFilterFactory args:{}
org.apache.solr.analysis.ASCIIFoldingFilterFactory args:{}

Запрос Анализатор: org.apache.solr.analysis.TokenizerChain

  • Класс Tokenizer: org.apache.solr.analysis.WhitespaceTokenizerFactory

Фильтры:

org.apache.solr.analysis.LowerCaseFilterFactory args:{}
org.apache.solr.analysis.SynonymFilterFactory args:{expand: true ignoreCase: true synonyms: synonyms.txt }
org.apache.solr.analysis.StopFilterFactory args:{words: stopwords.txt ignoreCase: true }
org.apache.solr.analysis.WordDelimiterFilterFactory args:{preserveOriginal: 1 catenateWords: 0 catenateNumbers: 0 splitOnCaseChange: 1 catenateAll: 0 generateNumberParts: 1 generateWordParts: 1 }
org.apache.solr.analysis.SnowballPorterFilterFactory args:{protected: protwords.txt }
org.apache.solr.analysis.LengthFilterFactory args:{min: 2 max: 500 }
org.apache.solr.analysis.RemoveDuplicatesTokenFilterFactory args:{}
org.apache.solr.analysis.ASCIIFoldingFilterFactory args:{}

Ответы [ 2 ]

1 голос
/ 01 апреля 2018

SynonymFilterFactory устарела и теперь должна быть заменена на SynonymGraphFilterFactory .Он раздавливает токены и исправляет проблемы с синонимами из нескольких слов, когда в одной позиции существует более одного токена.

0 голосов
/ 17 ноября 2011

Вы делаете запрос фразы (используя двойные кавычки)? Если нет, вы предоставляете два разных токена для SynonymFilter (море и печенье). В этом случае соответствующий синоним не найден.

Кстати, почти всегда лучше обрабатывать синонимы во время индексации. Смотрите здесь: http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...