Я полностью новичок в 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>
Пожалуйста, дайте мне знать, если вы знаете решение. С уважением.
Для обоих анализаторов первая строка должна быть токенизатором. Токенизатор используется для разделения текста на более мелкие части (в большинстве случаев слова). Для ваших нужд WhitespaceTokenizerFactory , вероятно, будет правильным выбором.
Если вы хотите абсолютно точное совпадение, вам не нужен какой-либо фильтр после токенизатора. Но если вы не хотите, чтобы поиск был чувствительным к регистру, вам нужно добавить LowerCaseFilterFactory .
Обратите внимание, что у вас есть два анализатора: один типа «индекс», а другой - типа «запрос». Как следует из названий, первый используется при индексировании контента, а другой - при выполнении запросов. Практически всегда хорошее правило - иметь одинаковый набор токенизаторов / фильтров для обоих анализаторов.
Если вам просто нужны точные совпадения, используйте KeywordTokenizerFactory вместо StandardTokenizerFactory во время запроса.
Полагаю, вы не получите никаких результатов, потому что токенизация выполняется по-разному для уже проиндексированных данных. Как сказал Паскаль, whitespaceTokenizer — правильный выбор в вашем случае. Используйте его как во время индексации, так и во время запроса и проверяйте результаты после индексации некоторых данных, а не на ранее проиндексированных данных.
Я предлагаю использовать страницу анализа, чтобы увидеть результаты без фактического индексирования. Это весьма полезно. Внесите изменения в схему, обновите ядро, перейдите на страницу анализа и просмотрите подробный вывод, чтобы получить пошаговый анализ.