MongoDB - 基于标签的自动完成搜索

时间:2016-05-25 14:16:29

标签: mongodb performance

我希望实现标签搜索功能,并在效率方面寻找一些建议。我是MongoDB的新手,因此我不确定性能的最佳实践。

好的,所以我想创建一个链接共享应用程序,用户根据其内容标记链接。例如,有趣的狗图像将被标记为“有趣”和“狗”。链接将具有:

 title, 
 url, 
 user_id, 
 tags: array of tags

现在,为了让我允许用户搜索链接,我需要使用所有标签的列表。对于可用性,这需要具有自动完成功能。所以我研究了一下并使用标签集合进行了测试,其中我对标签值进行索引,例如“搞笑”,然后使用正则表达式。

 db.tags.find({value:/^search/})

通过600,000个文档的集合,它在63毫秒内搜索以“s”开头的所有文档。随着搜索项的长度增加,执行时间减少。

现在出现了我不确定的部分。比方说,我想找到所有链接都有标签“funny”和“dog”(需要使用intersects)。我该如何存储标签?我应该存储每个标签的对象ID吗?我可以索引这些对象ID吗?是否有其他方法来构建整个数据库?

还可以根据他们已输入的标签建议标签。我想在标签文档中只有一个相关字段,例如:

tag
----
id
value
related: [{
   tag_id
   count
}]

(再次不确定,因为它会建议可能与已经输入的标签之一相关的标签而不是另一个标签。如果有交叉,则不会返回任何结果。)

非常感谢任何建议。

编辑:错误

1 个答案:

答案 0 :(得分:1)

在标记数组上创建文本索引。这将使您能够快速搜索有趣,有趣,有趣或有趣的狗。

https://docs.mongodb.com/manual/core/index-text/

db.tags.createIndex( { tags: "text" },  {background:true}  )

关于相关标签,我不认为您想引用_id值。您可以嵌入一系列相关标记,例如:

relatedTags: [{tag1}, {tag2}]