子文档上的mongoDB文本索引

时间:2014-10-12 11:33:43

标签: mongodb

我有一个看起来像这样的集合

{ "text1" : "text", 
  "url" : "http:....", 
  "title" : "the title",
   ......, 
   "search_metadata" : { "tags" : [ "tag1", "tag2", "tag3" ],
                         "title" : "the title",
                         "topcis": [ "topic1", "topic2"]
                       } 
}

我希望能够为search_metadata及其所有子文档添加文本索引。 ensureIndex({search_metadata:"text"})没有给我任何结果 和: ensureIndex({"$**":"text"})会给我无关的数据

我该如何实现?

1 个答案:

答案 0 :(得分:2)

来自text indexes page

  

文本索引可以包含值为字符串或数组的任何字段   字符串元素。要执行访问文本索引的查询,请使用   $ text查询运算符

你的search_metadata字段是一系列子文档,而不是字符串或字符串数​​组,所以它基本上没有正确的格式来使用MongoDB中的文本索引,因为它目前是结构化的。

现在,嵌入在search_metadata中你有字符串和字符串数组,所以你可以对它们使用文本索引,所以例如{search_metadata.tags : "text"}上的索引符合标准,应该可以正常工作。

因此,它可以在重构字段以满足文本索引标准之间进行选择,也可以选择索引相关子字段。如果你采用后一种方法,你可能会发现你不需要在每个字段上都有文本索引,而一个更简单(和更小)的索引也可以为你提供服务(使用标签上的普通索引然后{{ 3}}例如)。