Как использовать полнотекстовый поиск и сортировать их в mongodb - PullRequest
0 голосов
/ 26 февраля 2020

Я использую mongodb и mon goose для подключения с nodejs. Моя коллекция ключевых слов:

keywords
{
  _id: { type: Schema.Types.ObjectId  },
  word: { type: String, index: true },
  rank: {type: Number}, // Rank is count of voting from users.
  source: {type: String},
  link: {type: Schema.Types.ObjectId, ref: 'Content'} // Link to contents collection
}

И коллекция содержимого

{
  _id: { type: Schema.Types.ObjectId  },
  title: { type: String },
  content: { type: String }
}

Моя идея:

  1. Шаг 1: используйте полнотекстовый поиск, чтобы найти соответствующие ключевые слова Сортировка по ближайшему совпадению, рангу (сгруппировать по тому же самому близкому совпадению)
  2. Шаг 2: Получить ссылки (свойство ссылки ключевых слов), чтобы найти содержимое $ в ссылках.

Но это не совсем при сортировке на шаге 1.

Мой код:

// Get keywords
let indexes = await Keyword.aggregate([
  { $match: {
  $text: { $search: 'request query' }
}},
  { $limit: 100 },
  { $sort: { rank: -1, createdAt: -1 } }, // I want to sort by highest rank
  { $group: { _id: '$link' } },
  { $project: { link: 1 } }
]);

return await Content.find({
  _id: {
    $in: indexes.map((item) => {
      return item._id;
    })
  }
});

Любая идея, чтобы помочь мне. Большое вам спасибо!

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

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

0 голосов
/ 27 февраля 2020

почему бы не использовать одну коллекцию? установите те же поля, что и индексы. запрос по ключевым словам индекса просто смотрит на индекс для выбора документов - он не открывает документы как часть поиска. Индекс существует отдельно от do c.

Похоже, вы реализуете разбиение на 2 коллекции для поиска по индексу, но Mongodb делает это для вас внутренне, назначая поле как в индексе .....

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