【发布时间】:2016-05-27 06:25:34
【问题描述】:
我正在寻找实现标签搜索功能并在效率方面寻求一些建议。我是 MongoDB 新手,所以我不确定性能方面的最佳实践。
好的,所以我想创建一个链接共享应用程序,用户根据其内容标记链接。例如,有趣的狗图像将被标记为“有趣”和“狗”。一个链接会有一个:
title,
url,
user_id,
tags: array of tags
现在,为了让用户能够搜索链接,我需要一个所有使用标签的列表。为了可用性,这需要具有自动完成功能。因此,我进行了一些研究并使用一组标签进行了测试,我在其中索引了标签值,例如“有趣”,然后使用正则表达式。
db.tags.find({value:/^search/})
它收集了 600,000 个文档,在 63 毫秒内搜索了所有以“s”开头的文档。随着搜索词的长度增加,执行时间会减少。
现在是我不确定的部分。比如说我想找到所有带有“有趣”和“狗”标签的链接(需要使用相交)。我应该如何存储标签?我应该存储每个标签的对象 ID 吗?我可以索引这些对象 ID 吗?有没有其他方法来构建整个数据库?
我还希望能够根据他们已经输入的标签推荐标签。例如,我正在考虑在标签文档中添加一个相关字段:
tag
----
id
value
related: [{
tag_id
count
}]
(再次不确定,因为它会建议可能与已输入标签之一相关而不与另一个相关的标签。相交这将不返回任何结果。)
任何建议将不胜感激。
编辑:错误
【问题讨论】:
-
使用您当前的数据模型并可能存储标签和相关标签的 ID...您是否考虑过“$setIntersection”聚合查询?或者这就是您所说的“使用相交”。我认为通过将标签存储在一个单独的集合中,每个集合都有一个相关标签列表,您走在了正确的轨道上。
-
是的,对不起,这就是我的意思。我想我可以设置所有相关标签的交集。
标签: mongodb performance