При включенном выделении корней поиск корневого слова не дает совпадений.

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

Например, поиск support дает совпадения, если не используется поиск корней. Поиск support с использованием основы не дал результатов. Однако поиск по supporten возвращает совпадения с support.

Отладив запрос, я вижу, что он является корнем слова support в suppor (что, кстати, неверно, но это не имеет значения). Однако, имея в основе слово suppor, я хочу, чтобы оно также искало совпадения с исходным словом запроса.

Буду признателен за любую помощь в этом!


person Johan    schedule 19.08.2011    source источник


Ответы (2)


Афаик, нет возможности сохранить исходное слово при построении основы...

Я предполагаю, что вы используете solr.SnowballPorterFilterFactory. Алгоритм Snowball слишком агрессивен.

Вам следует попробовать стеммер Hunspell или, возможно, solr.SwedishLightStemFilterFactory.

person Romain Meresse    schedule 21.12.2011

Обходной путь, который вы можете сделать, это переформатировать ваш запрос в «support support*» или «support support~». * — это сопоставление с подстановочными знаками, а ~ — нечеткое сопоставление с использованием синтаксиса Lucene. Я знаю, что вы не упомянули о необходимости использовать подстановочные знаки и нечеткий поиск, но я обнаружил, что в этих обстоятельствах определение корня запроса не будет действовать, поэтому «поддержка» сохраняется. И выделение корней по-прежнему будет эффективным для первого слова, поэтому будут возвращены оба результата, если они есть. Кроме того, нечеткий поиск поможет снизить допустимость опечаток в запросах пользователей, что является дополнительным преимуществом.

person Magic_Cindy    schedule 04.08.2016