我有一个存储标签列表的文章集合,如下所示:
{
id: 1,
title: "Sample title"
tags: ["tag1", "tag2", "tag3", "tag4"]
}为了将文章匹配到用户的兴趣,我使用聚合" match“和"setIntersection”来计算用户兴趣和文章标签之间有多少公共标签,然后对它们进行排序,以获得最佳匹配。
db.article.aggregate([
{
"$match": {
{"tags": {"$in": ["tags", ["tag1", ..., "tag100"]}}
}
},
{
"$project": {
"tags_match": {
"$setIntersection": ["tags", ["tag1", ..., "tag100"]]
},
}
},
{
"$project": {
"tags_match_size": {
"$size": "$tags_match"
},
}
},
{"$sort": {"tags_match_size" : 1}}
{ "$limit" : 40 }
]
);如果我的文章集中有几百个文档,它就可以很好地工作。现在我有大约一百万篇文章,大约需要半个小时才能完成。
我无法为"tags_match_size“创建索引以提高运行速度,因为它是聚合查询中的一个新字段。
怎样才能让查询运行得更快?谢谢。
发布于 2017-04-10 17:18:35
为标签字段创建索引。索引仅适用于第一个$match。
https://stackoverflow.com/questions/43319160
复制相似问题