Я использую 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: используйте полнотекстовый поиск, чтобы найти соответствующие ключевые слова Сортировка по ближайшему совпадению, рангу (сгруппировать по тому же самому близкому совпадению)
- Шаг 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;
})
}
});
Любая идея, чтобы помочь мне. Большое вам спасибо!