Анализатор запросов / полей Solr

Я полностью новичок в Solr и у меня проблема с попаданием нежелательных символов в результаты запроса. , Например, когда я ищу "foo bar", я получаю контент с помощью "'foo' bar" и т. Д. Я просто хочу иметь точные совпадения. Насколько я знаю, это можно настроить в файле schema.xml. Тип моего поля содержимого:

<fieldtype name="textNoStem" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <filter class="solr.LowerCaseFilterFactory" />
        <tokenizer class="solr.KeywordTokenizerFactory" />
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory" />
        <filter class="solr.LowerCaseFilterFactory" />
    </analyzer>
</fieldtype>

Пожалуйста, дайте мне знать, если вы знаете решение. С уважением.

7
задан theEpsilon 5 December 2019 в 01:08
поделиться

3 ответа

Для обоих анализаторов первая строка должна быть токенизатором. Токенизатор используется для разделения текста на более мелкие части (в большинстве случаев слова). Для ваших нужд WhitespaceTokenizerFactory , вероятно, будет правильным выбором.

Если вы хотите абсолютно точное совпадение, вам не нужен какой-либо фильтр после токенизатора. Но если вы не хотите, чтобы поиск был чувствительным к регистру, вам нужно добавить LowerCaseFilterFactory .

Обратите внимание, что у вас есть два анализатора: один типа «индекс», а другой - типа «запрос». Как следует из названий, первый используется при индексировании контента, а другой - при выполнении запросов. Практически всегда хорошее правило - иметь одинаковый набор токенизаторов / фильтров для обоих анализаторов.

14
ответ дан 6 December 2019 в 15:16
поделиться

Если вам просто нужны точные совпадения, используйте KeywordTokenizerFactory вместо StandardTokenizerFactory во время запроса.

0
ответ дан 6 December 2019 в 15:16
поделиться

Полагаю, вы не получите никаких результатов, потому что токенизация выполняется по-разному для уже проиндексированных данных. Как сказал Паскаль, whitespaceTokenizer — правильный выбор в вашем случае. Используйте его как во время индексации, так и во время запроса и проверяйте результаты после индексации некоторых данных, а не на ранее проиндексированных данных.

Я предлагаю использовать страницу анализа, чтобы увидеть результаты без фактического индексирования. Это весьма полезно. Внесите изменения в схему, обновите ядро, перейдите на страницу анализа и просмотрите подробный вывод, чтобы получить пошаговый анализ.

0
ответ дан 6 December 2019 в 15:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: