我有一个看起来像这样的集合
{ "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"})
会给我无关的数据
我该如何实现?
答案 0 :(得分:2)
文本索引可以包含值为字符串或数组的任何字段 字符串元素。要执行访问文本索引的查询,请使用 $ text查询运算符
你的search_metadata
字段是一系列子文档,而不是字符串或字符串数组,所以它基本上没有正确的格式来使用MongoDB中的文本索引,因为它目前是结构化的。
现在,嵌入在search_metadata
中你有字符串和字符串数组,所以你可以对它们使用文本索引,所以例如{search_metadata.tags : "text"}
上的索引符合标准,应该可以正常工作。
因此,它可以在重构字段以满足文本索引标准之间进行选择,也可以选择索引相关子字段。如果你采用后一种方法,你可能会发现你不需要在每个字段上都有文本索引,而一个更简单(和更小)的索引也可以为你提供服务(使用标签上的普通索引然后{{ 3}}例如)。