mongodb全文搜索中如何计算textScore字段?

12

我想知道MongoDB如何计算全文检索的文本分数。 比如,如果我在以下内容中搜索samsung note edge

Samsung Galaxy Note Edge
Samsung Galaxy Note 4
Samsung Galaxy S6 Edge
Samsung Galaxy Note 4 duos
Samsung Z

全文搜索如下:

db.mobiles.find({
    $text : {$search : "samsung note edge"}
}, {
    score : {$meta : "textScore" }
}).sort({
    score : {$meta : "textScore" }
})

给我的结果如下:

{
    name : "Samsung Galaxy Note Edge",
    score: 1.875000
},
{
    name : "Samsung Galaxy Note 4",
    score: 1.250000
},
{
    name : "Samsung Galaxy S6 Edge",
    score: 1.250000
},
{
    name : "Samsung Galaxy Note 4 duos",
    score: 1.200000
},
{
    name : "Samsung Z",
    score: 0.750000
}

如果我搜索Samsung edge,结果会有所不同。


2
请查看以下网址:https://groups.google.com/forum/#!topic/mongodb-user/99t5WXmUUAg - Vishwas
1个回答

2
  • exp = 0开始;
  • 每次出现该项时:如果exp = 0,则将exp设置为1,否则将exp设置为2 * exp
  • 通过1/exp增加频率。

因此,实际上你是正确的,这里有一个几何级数的总和。如果一个项出现k次,那么该项的freq(更像是得分而不是频率,但在结构中称为freq)将是 1 + 1/2 + ... + (1/2)^(k - 1) = (1 - (1/2)^k)/(1 - 1/2) = 2 * (1 - 1/2^k)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接