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

时间:2015-01-02 06:37:02

标签: mongodb full-text-search

我有一个简单的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吗?

1 个答案:

答案 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"
}