MongoDB textScore按字位置

问题描述 投票:0回答:1

如何在MongoDB中设置文本搜索,以便在关键字首先显示的结果中获得更高的分数?

例如,这就是我现在正在做的事情:

db.product.aggregate(
  [
    { $match: { $text: { $search: "notebook acer" }, isAvailable: true } },
    { $sort: { score: { $meta: "textScore" } } },
    { $project: { searchName: 1, _id: 0, score: { $meta: "textScore" } } }
  ]
)

在结果中,我得到:

{
    "searchName" : "Mochila para Notebook Acer",
    "score" : 1.25
},
{
    "searchName" : "Notebook Acer E5-471-36me Intel Core I3 1.90ghz 4gb Hdd 500gb Linux Hdmi",
    "score" : 1.0625
}

但我需要先得到第二个结果,因为关键字首先出现在索引字段中。

有没有办法实现这个目标?

mongodb full-text-search aggregate
1个回答
1
投票

我认为你必须使用运算符$ indexOfCP,你可以计算你的单词的位置,然后你可以对你计算的这个位置进行排序。

https://docs.mongodb.com/manual/reference/operator/aggregation/indexOfCP/

对于位置部分,它是这样的:

db.product.aggregate(
   [
     { $project: { kwPosition: { $indexOfCP: [ "$searchName", "notebook acer" ] } } },
     { $match: { "kwPosition": {"$ne": -1} } },
     { $sort: { kwPosition: 1 } }
   ]
)

您可以结合两种逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.