我有一个简单的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,我需要使用其他一些appproach吗?
答案 0 :(得分:3)
正如我所看到的,MongoDB将文本搜索索引限制为每个集合只有一个字段。
你在这里弄错了。每个集合只能有一个文本索引。 来自docs:
一个集合最多可以包含一个文本索引。
索引可以包含要为文本搜索建立索引的multiple个字段。
您可以创建索引
db.collection.ensureIndex({"userName":"text","description":"text"});
并搜索特定关键字,
db.collection.find({$text:{$search:"keyword"}});
您的收藏可以是自包含的,不会引用其他收藏品。
{
userName:"John Doe",
description:"This is a test user"
}