Solr: поиск с помощью «hypens» / тире возвращает ноль результатов - PullRequest
1 голос
/ 28 декабря 2011

У меня есть различные текстовые поля, и иногда в их значениях есть переносы / тире, например, Омега-3.Теперь, когда я ищу «Омега» или даже «Омега-», я получаю релевантные результаты, но когда я ищу «Омега-3», я получаю ноль результатов.

Поможет ли установка catenateAll = 1 в «WordDelimiterFilterFactory» решить эту проблему?Если да, тогда я должен установить его в 1 одновременно: время запроса и время индекса?Или мне нужно что-то еще сделать, чтобы решить эту проблему?Спасибо!

Ниже приведена часть схемы, которая определяет типы текстовых полей.

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
        <analyzer type="index">
            <tokenizer class="solr.WhitespaceTokenizerFactory" />

            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
            <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" />
            <filter class="solr.LowerCaseFilterFactory" />
            <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt" />
            <filter class="solr.PorterStemFilterFactory"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.WhitespaceTokenizerFactory" />

            <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
            <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" />
            <filter class="solr.LowerCaseFilterFactory" />
            <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt" />
            <filter class="solr.PorterStemFilterFactory"/>
        </analyzer>
    </fieldType>

Ответы [ 2 ]

3 голосов
/ 11 января 2012

Тире - это специальные символы в Solr / Lucene. Вам нужно сбежать от них с помощью \

Документация по персонажам Lucene Escape

0 голосов
/ 07 декабря 2016

Я думаю, что несколько более подходящая ссылка:

https://wiki.apache.org/solr/SolrRelevancyCookbook (см. Разделители внутри слов)

Существует довольно много советов, включая различные подходы.*

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