全文搜索的正确 mongodb 集合结构是什么?
What is a correct mongodb collection structure for full-text search?
我有一个简单的 MongoDB 网站,其中专用搜索引擎(如 elasticsearch)会显得矫枉过正,并且会增加支持的复杂性,所以我想坚持使用 MongoDB 2.6 全文搜索。如我所见,MongoDB llimits text search index to only one
field per collection.如果我有一个 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,我需要使用其他方法吗?
As i can see, MongoDB llimits text search index to only one field per collection.
你错了。一个 collection 每个 collection 只能有一个文本 index。
来自 docs:
A collection can have at most one text index.
索引又可以包含 multiple 个要为文本搜索编制索引的字段。
您可以创建索引,
db.collection.ensureIndex({"userName":"text","description":"text"});
并搜索特定关键字,
db.collection.find({$text:{$search:"keyword"}});
您的 collection 可以是独立的,无需引用其他 collection。
{
userName:"John Doe",
description:"This is a test user"
}
我有一个简单的 MongoDB 网站,其中专用搜索引擎(如 elasticsearch)会显得矫枉过正,并且会增加支持的复杂性,所以我想坚持使用 MongoDB 2.6 全文搜索。如我所见,MongoDB llimits text search index to only one
field per collection.如果我有一个 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,我需要使用其他方法吗?
As i can see, MongoDB llimits text search index to only one field per collection.
你错了。一个 collection 每个 collection 只能有一个文本 index。 来自 docs:
A collection can have at most one text index.
索引又可以包含 multiple 个要为文本搜索编制索引的字段。
您可以创建索引,
db.collection.ensureIndex({"userName":"text","description":"text"});
并搜索特定关键字,
db.collection.find({$text:{$search:"keyword"}});
您的 collection 可以是独立的,无需引用其他 collection。
{
userName:"John Doe",
description:"This is a test user"
}