Поиск по токенайзеру - PullRequest
3 голосов
/ 23 июня 2011

Мы пытаемся добавить простую функцию поиска на наш сайт, который перечисляет рестораны.Мы пытаемся определить название места, местоположение и особенности места в строке поиска, что-то вроде «дешевые рестораны возле Каира» или «китайская и элитная еда в Вирджинии».

То, что мы делаем сейчас, - это токенизация запроса и поиск в таблицах с наименьшими затратами производительности в первую очередь (таблица цен (cheap-budget-дорогой-high-end) меньше, чем таблицысписок мест).Это правильный подход?

- С уважением.Yehia

Ответы [ 2 ]

1 голос
/ 04 октября 2011

Я бы сказал, что вы должны создать наборы синонимов (например, дешевые, малобюджетные и т. Д., Перейдите в synset: 1) и отобразить каждый токен из строки поиска в одну из этих групп.

Кстати, этоздесь будет легко справляться с орфографическими ошибками, так как в общем случае это довольно небольшое пространство для поиска.Отредактируйте расстояние, обычные k-граммы, ... все должно быть в порядке.

На следующем шаге вы должны создать инвертированные списки индексов для каждой из этих син-групп на карте с отсортированным списком ресторанов, которые могут бытьсвязано с этим свойством.Получите все эти списки для каждой сингруппы из запроса и просто пересекайте их.

Слова, которые нельзя сопоставить с одним из этих наборов, вероятно, придется игнорировать, если у вас нет своего рода полных текстов о ресторанах, которые вы также можете индексировать.В этом случае вы также можете составить такие списки ресторанов для «нормальных» слов и пересекать их.Но это уже было бы довольно близко к классическим поисковым системам, и было бы неплохо использовать такую ​​технологию, как apache lucence.Без полных текстов я не думаю, что вам понадобится такая вещь, потому что инвертированный индекс snygroups действительно легко обрабатывать самостоятельно.

0 голосов
/ 04 октября 2011

Возможно, вам не хватает способа обработки запросов с ошибками.

...