全文搜索的正确 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"
}