什么是全文搜索的正确 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 集合结构?的主要内容,如果未能解决你的问题,请参考以下文章
CosmosDB mongoDB API 排序和全文搜索抛出错误
在 Meteor 应用程序中实现 MongoDB 2.4 的全文搜索