Как реализовать поиск по ключевым словам и местоположению с помощью MongoDB? - PullRequest
3 голосов
/ 18 июля 2011

Я пытаюсь реализовать веб-приложение / приложение для смартфона, которое позволяет пользователям выполнять поиск мест по ключевым словам и местоположению, и вот требование:

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

Мы используем ASP.NET MVC в качестве основы веб-разработки и MongoDB в качестве хранилища данных.Мы также поддерживаем список всех почтовых индексов и городов / штатов, а также их центроидов (широта / долгота) в нашей базе данных.Мы думаем об отмене оценки, которую полнотекстовая система предоставляет (например, оценка Lucene) нашим собственным алгоритмом.Я пытаюсь найти лучшее решение для решения этой проблемы.Мне интересно, следует ли нам использовать полнотекстовый поиск MongoDB или попробовать использовать Lucene .NET или, возможно, Solr?Любая помощь / указатель / комментарий всегда приветствуется!

1 Ответ

3 голосов
/ 19 июля 2011

Таким образом, в качестве отправной точки MongoDB не поддерживает полнотекстовый поиск.

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

Однако это далеко от того, что есть у Солра и Сфинкса.

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

...