用权重控制搜索结果
文本搜索为在索引字段中包含搜索词的每个文档分配分数。分数确定文档与给定搜索查询的相关性。
对于text
索引,索引字段的* weight *表示就文本搜索得分而言,该字段相对于其他索引字段的重要性。
对于文档中的每个索引字段,MongoDB 将匹配数乘以权重并求和。然后,使用此总和,MongoDB 计算文档的分数。有关按文本分数返回和排序的详细信息,请参见$meta运算符。
索引字段的默认权重为 1.要调整索引字段的权重,请在db.collection.createIndex()方法中包括weights
选项。
Warning
仔细选择砝码,以免需要重新编制索引。
集合blog
具有以下文档:
{
_id: 1,
content: "This morning I had a cup of coffee.",
about: "beverage",
keywords: [ "coffee" ]
}
{
_id: 2,
content: "Who doesn't like cake?",
about: "food",
keywords: [ "cake", "food", "dessert" ]
}
要为content
字段和keywords
字段创建具有不同字段权重的text
索引,请将createIndex()方法的weights
选项包括在内。例如,以下命令在三个字段上创建索引,并将权重分配给两个字段:
db.blog.createIndex(
{
content: "text",
keywords: "text",
about: "text"
},
{
weights: {
content: 10,
keywords: 5
},
name: "TextIndex"
}
)
text
索引具有以下字段和权重:
-
content
的权重为 10, -
keywords
的权重为 5,并且 -
about
的默认权重为 1.
这些权重表示索引字段彼此之间的相对重要性。例如,content
字段中的字词匹配具有:
-
在
keywords
字段中,将术语影响匹配2
倍(即10:5
), -
在
about
字段中将影响作为术语匹配的10
倍(即10:1
)。