Подтвердить что ты не робот

Лучший способ выполнить полный текстовый поиск в MongoDB и Mongoose

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

Я попробовал ElasticSearch, но было невозможно запросить и разбивать страницы...

Я пробовал много плагинов для Mongoose, таких как ElMongo, mongoose-full-text, Mongoosastic и т.д.... все очень плохо документированы, и я не знаю, как выполнить хороший полнотекстовый поиск.

Итак, моя коллекция является обычной коллекцией:

user = {
  name: String,
  email: String,
  profile: {
    something: String,
    somethingElse: String
  }
}

У меня есть вход для поиска на странице с простым POST, если я набираю hello world, мне нужно искать по всем полям коллекции соответствующие слова моего поискового запроса и получать результаты.

Будет очень хорошо также иметь опции для обработки разбиения на страницы, как 10 элементов на страницу или что-то в этом роде.

Какое наилучшее решение для этого? Я использую MongoDB 2.6. * С Mongoose, NodeJS и ExpressJS.

Спасибо.

4b9b3361

Ответ 1

Вы можете добавить текстовый индекс в свое определение схемы Mongoose, которое позволяет использовать $text в ваших запросах find для поиска всех полей, включенных в текстовый индекс.

Чтобы создать индекс для поддержки текстового поиска, например, name и profile.something:

var schema = new Schema({
  name: String,
  email: String,
  profile: {
    something: String,
    somethingElse: String
  }
});
schema.index({name: 'text', 'profile.something': 'text'});

Или, если вы хотите включить все строковые поля в индекс, используйте подстановочный символ '$**':

schema.index({'$**': 'text'});

Это позволит вам выполнить поисковый запрос с текстовым поиском, например:

MyModel.find({$text: {$search: searchString}})
       .skip(20)
       .limit(10)
       .exec(function(err, docs) { ... });

Ответ 2

В поисковом запросе вы можете использовать плагин Elasticsearch. В Elasticsearch вы можете создать свой собственный пользовательский поисковый запрос для поиска любого конкретного текста и строки с указанной продолжительностью времени в реальном времени.

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