Работают ли параллельные и нечеткие поиски в Apache Solr - PullRequest
2 голосов
/ 13 марта 2019

Я использую фабрику фильтров портера для поля, содержащего от 3 до 4 слов.

Например: "ABC BLOSSOM COMPANY"

Я ожидаю получить вышеуказанный документ при поискедля ABC BLOSSOMING COMPANY, а также.

Когда я запрашиваю это:

name:ABC AND name:BLOSSOMING AND name:COMPANY

я получаю свой результат

Вот как выглядит проанализированный запрос

+ name:южный + имя: цветение + имя: компани (Stemmer отлично работает)

Но когда я добавляю нечеткий синтаксис и выполняю такие запросы,

name:ABC~1 AND name:BLOSSOMING~1 AND name:COMPANY~1

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

+ name: abc ~ 1 + name: blossoming ~ 1 + имя: компания ~ 2

Это ясно показывает, что остановка не происходит.Пожалуйста, просмотрите и дайте отзыв.

1 Ответ

1 голос
/ 14 марта 2019

TL; DR
Стемминга не происходит, так как вы использовали PorterFilter, который не является MultiTermAwareComponent .

Что делать?
Используйте один из фильтров / нормализаторов, который реализует интерфейс MultiTermAwareComponent .

Объяснение
Вы, как и многие другие, пойманы поведением Solr и Lucense Multiterm. хорошая статья на эту тему на вики Solr. Несмотря на то, что эта статья устарела, она по-прежнему верна

Одним из сюрпризов для большинства пользователей Solr является то, что запросы с подстановочными знаками не были проанализированы. На практике это означает, что запросы с подстановочными знаками (и префиксами, и диапазонами) чувствительны к регистру, что не соответствует ожиданиям. Начиная с этого SOLR-2438, SOLR-2918 и, возможно, SOLR-2921, это поведение изменилось.

Что за мультитерм вы спрашиваете? По сути, это любой термин, который может «указывать» на более чем один реальный термин. Например, run * может быть расширен до run, runner, run, runt и т. Д. Аналогично, запрос диапазона также является «многотемпературным». До Solr 3.6 они были полностью необработанными, прикладному уровню обычно приходилось применять любые требуемые преобразования, например, ввод в нижнем регистре. Запуск этих типов терминов через «нормальную» цепочку анализа запросов приводит к разного рода интересному поведению, поэтому его избегали.

...