OPTIONS
翻译或纠错本页面

通过权重控制搜索结果

本文描述了如何创建带权重的 文本 索引

对于 文本 索引而言,被索引键的 权重 象征这它相对于其他键的在得分中的重要性。某一给定词在一篇文档中的得分来源于文档中每个键的权重乘以该键上该词的频率的总和。参见 $meta 操作符了解更多关于通过文本得分返回结果和排序的细节信息。

键的默认权重是1.如果希望调整键的权重,可以在 db.collection.ensureIndex() 方法中添加 weights 选项。

警告

慎重选择权重,以免重新索引

集合 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`` 键有不同的权重,可以在 ensureIndex() 方法中包含 weights 选项。例如,如下命令会创建一个有三个键的索引并给两个键赋予权重:

db.blog.ensureIndex(
                     {
                       content: "text",
                       keywords: "text",
                       about: "text"
                     },
                     {
                       weights: {
                                  content: 10,
                                  keywords: 5,
                                },
                       name: "TextIndex"
                     }
                   )

这个 文本 索引有如下键和权重:

  • content 的权重为 10,

  • keywords 的权重为5,

  • about 的权重为默认值1。

这些权重表面了这些键互相之间的相对重要性。例如,在 content 键中匹配的单词:

  • 它的重要性会是在 keywords 键中得到匹配的单词的重要性的 两倍 ( 10:5 )

  • 它的重要性会是在 keywords 键中得到匹配的单词的重要性的 十倍 ( 10:1 )