什么是全文搜索的正确 mongodb 集合结构?

Posted

技术标签:

【中文标题】什么是全文搜索的正确 mongodb 集合结构?【英文标题】:What is a correct mongodb collection structure for full-text search? 【发布时间】:2015-02-28 13:25:21 【问题描述】:

我有一个简单的 MongoDB 网站,其中专用搜索引擎(如 elasticsearch)将是一种过度杀伤,并且会增加支持复杂性,因此我想坚持使用 MongoDB 2.6 全文搜索。如我所见,MongoDB 将文本搜索索引限制为每个集合仅one 字段。如果我有一个Users 集合,并且想要启用对用户名和用户描述的全文搜索,那么正确的集合结构是什么?我可以建议创建一个单独的 Text 集合,我将在其中保留我网站的所有文本信息并将其用于搜索。例如,将这样插入用户:

users.insert(
  name_ref: texts.insert(text: "John Doe", type: USER_NAME),
  description_ref: texts.insert(text: "This is a test user", type: USER_DESCR),
);

这是一个好的解决方案,还是这么多的集合间依赖会杀死 MongoDB,我需要使用其他方法?

【问题讨论】:

【参考方案1】:

如我所见,MongoDB 将文本搜索索引限制为每个集合仅一个字段。

你在这里弄错了。一个集合每个集合只能有一个文本index。 来自docs:

一个集合最多可以有一个文本索引。

该索引又可以包含multiple 字段,以便为文本搜索编制索引。

你可以创建索引,

db.collection.ensureIndex("userName":"text","description":"text");

并执行特定关键字的搜索,

db.collection.find($text:$search:"keyword");

您的收藏可以是自包含的,无需引用其他收藏。


  userName:"John Doe",
  description:"This is a test user"

【讨论】:

感谢您的精彩回答,祝您新年快乐!

以上是关于什么是全文搜索的正确 mongodb 集合结构?的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB全文搜索和查找运算符

CosmosDB mongoDB API 排序和全文搜索抛出错误

在 Meteor 应用程序中实现 MongoDB 2.4 的全文搜索

为啥直接搜索 MongoDB 分片的全文搜索比通过集群管理器 (mongos) 实例快得多?

确切的短语在 mongodb 全文搜索中无法正常工作

MongoDB 全文和部分文本搜索