Как реализовать поиск «начинается с» в SOLR? - PullRequest
1 голос
/ 25 января 2010

У меня есть сайт объявлений, и пользователи могут, например, искать автомобили.

При поиске автомобиля в их именах есть несколько окончаний, как вы, наверное, знаете. Например, скажем, Bmw 330ci (окончание «ci»), но есть также Bmw 330i или Bmw 330di и т. Д. И т. Д.

Как я могу заставить SOLR «понять» это, так что если пользователи ищут 330, SOLR выдаст результаты, содержащие 330ci / 330i / 330di и т. Д.

Кроме того, он НЕ должен возвращать результаты, если пользователь специально вводит Bmw 330ci, тогда он должен ТОЛЬКО возвращать Bmw 330ci, а НЕ Bmw 330i / di и т. Д. ...

Я новичок в SOLR, но начинаю понимать, как заставить его работать. Нужно небольшое руководство по этому вопросу, хотя!

Как бы вы это сделали?

Спасибо

Ответы [ 4 ]

1 голос
/ 25 января 2010

Ну, это зависит от нескольких факторов, но, как правило, в первом случае вы можете использовать шаблоны, например:
д = 330 *

во втором случае вы можете указать прямо на поле и выполнить точный поиск: : 330CI

1 голос
/ 25 января 2010

Возможно, вы захотите проанализировать поле, используя WordDelimiterFilterFactory, настроенный для разделения на числовые переходы. Это позволит запросу 330 соответствовать 330 что-нибудь.

Я считаю, что по умолчанию, когда вы также делаете это во время запроса, он создает запрос фразы из 330di -> "330 di", который должен совпадать, только если обе части присутствуют в индексе. Подробнее см. http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters.

0 голосов
/ 03 февраля 2010
0 голосов
/ 25 января 2010

Я не знаю SOLR, похоже, для полнотекстового поиска.

Однако, поскольку вы знаете свою модель заранее, вы можете использовать обычный SQL для этого.


В поле базы данных для имени вместо того, чтобы смешивать базовое имя с окончанием, вы можете разделить два на два столбца, например «rootName» и «suffixName».

Тогда ваш SQL может очень естественно и чрезвычайно эффективно (по сравнению с полнотекстовым поиском) найти то, что вам нужно: найти «rootName», а также выбрать «суффиксName» (но только если указано).

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