繁体   English   中英

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

[英]MongoDB - Tag based search with autocomplete

我希望实现标签搜索功能,并在效率方面寻找一些建议。 我是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
}]

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

任何建议将不胜感激。

编辑:错误

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

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

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

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

relatedTags: [{tag1}, {tag2}]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM