MongoDB - поиск текста - PullRequest
       25

MongoDB - поиск текста

3 голосов
/ 09 марта 2012

Какова наилучшая стратегия для выбора записей mongodb, в которых строковое значение содержит набор слов или фраз? Я думаю о чем-то эквивалентном функции mysql LIKE, например,

    WHERE (TEXT LIKE "% apple %") or (TEXT LIKE "% banana %")

Я видел варианты, которые включают в себя токенизацию строки, но это включало бы создание униграмм для всего текста, что было бы огромным, нет?

Ответы [ 4 ]

4 голосов
/ 04 апреля 2013

Mongo теперь поддерживает текстовый поиск начиная с 2.4. Мой опыт был довольно позитивным

http://docs.mongodb.org/manual/applications/text-search/

Вы запускаете сервер с включенным текстовым поиском setParameter. Затем включите индекс в коллекции Затем выполните поиск с помощью runCommand

3 голосов
/ 09 марта 2012

MongoDB не имеет возможности полнотекстового поиска в настоящее время, но легко использовать внешние поисковые системы, такие как SOLR.

Я настоятельно не рекомендую вам самим пытаться перестроить текстовый поиск с помощью регулярных выражений, слов и т.д. Вы должны сосредоточиться на собственных функциях вашего приложения:)

Я использую эту комбинацию: Mongoid , Sunspot и Mongoid-Sunspot . Он очень хорошо работает на производстве, а настройка разработки проста.

1 голос
/ 09 марта 2012

Вы можете использовать поддержку регулярных выражений в запросах MongoDB. Более подробная информация доступна по следующей ссылке

http://docs.mongodb.org/manual/reference/operator/regex/

Вот два примера, когда приведенная выше ссылка снова переместится в будущем:

db.collection.find( { field: /acme.*corp/i } );
db.collection.find( { field: { $regex: 'acme.*corp', $options: 'i' } } );
0 голосов
/ 09 сентября 2015

Почему-то встроенный текстовый поиск MongoDB не соответствовал моим требованиям к существующей базе данных, в которой использовался составной индекс. Сейчас я использую mongoose-search-plugin , и он работает великолепно. Для получения оценки релевантности используются естественные алгоритмы определения стеблей и расстояния.

User.search('Malaysia Car Food',{username:1},{},  function(err, u){
   console.log('Search Results: '+JSON.stringify(u));
}); 
...