1. Что я делаю:SOLR SynonymFilter и WordDelimiter проблема
Я в настоящее время пытаюсь реализовать некоторые популярные синонимы, чтобы увеличить количество отображаемых объявлений.
2. Ограничения:
Благодаря бизнес-логики, мой оператор по умолчанию и так, как я понимаю, ищу:
"PS3 Slim 250gb новый"
Должны возвращать элементы, содержащие каждый отдельный термин в этом запросе. Я попытался переключиться на «OR», но это вернет элементы только с надписью «new» или «slim».
Поскольку мы всегда сортируем по дате, а не по релевантности, это огромная проблема. Итак, «И».
Идея состоит в том, чтобы иметь дело с множеством синонимов и стоп-слов.
3. Мои настройки:
Моя текущая настройка SOLR содержит следующую цепочку: анализатор
<fieldtype name="text_pt" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory" protected="protwords.txt"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1"
generateNumberParts="1" preserveOriginal="1" catenateWords="1"
catenateNumbers="1" catenateAll="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="false" words="portugueseStopWords.txt"/>
<filter class="solr.BrazilianStemFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory" protected="protwords.txt"/>
<filter class="solr.SynonymFilterFactory" ignoreCase="true" synonyms="portugueseSynonyms.txt"
expand="true"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="portugueseStopWords.txt"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1"
catenateWords="1" preserveOriginal="1" catenateNumbers="1" catenateAll="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.BrazilianStemFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldtype>
4. Проблема:
У меня есть синонимы:
plaistation, plastation => playstation #dirty spelling correction
ps3, playstation3 #just a synonym
Первый только что работает. Второй результат в то, что, как представляется, конфликт между синонима и WordDelimiter, как видно на обеих странице анализ и & debugQuery:
Debug Query
<str name="querystring">title_search_pt:(ps3)</str>
<str name="parsedquery">MultiPhraseQuery(title_search_pt:"(ps3 ps) (3 playstation3 playstation) 3")</str>
Анализатор запросов
WhitespaceTokenizerFactory => [pos:1] ps3
ASCIIFoldingFilterFactory => [pos:1] ps3
SynonymFilterFactory => [pos:1] ps3
[pos:1] playstation3
StopFilterFactory => [pos:1] ps3
[pos:1] playstation3
WordDelimiterFilterFactory => [pos:1] ps3 [pos:2] 3 [pos:3] 3
[pos:1] ps [pos:2] playstation3
[pos:2] playstation
Как вы можете видеть, все было хорошо, пока WordDelimiterFilter не испортил это.
То, что я ожидал, было ps и playstation как в pos: 1, так и 3 в pos: 2.
Это не проблема, если у меня была операция «ИЛИ» как операция по умолчанию, но поскольку это невозможно для меня, это будет пытаться сопоставить документы, имеющие BOTH ps3 и playstation3, которые вместо того, чтобы давать мне больше результатов, это дает меня даже меньше ..
5.Вопрос:
Что я могу сделать по этому поводу? Я думаю, что WordDelimiterFilter дает много хороших вещей, чтобы полностью удалить его, но это смещение позиции маркера не выглядит правильным для меня.
'увеличить количество отображаемых объявлений' hmmm ... не уверен, помогать или ... –