我正在为我的学校做一个MongoDB项目。我有一个句子集合,我做一个普通的文本搜索来找到集合中最相似的句子,这是基于评分的。
我运行此查询
db.sentences.find({$text: {$search: "any text"}}, {score: {$meta: "textScore"}}).sort({score:{$meta:"textScore"}})
当我查询句子的时候看看这些结果,
"that kicking a dog causes it pain"
----Matched With
"that kicking a dog causes it pain – is not very controversial."
----Give a Result of:
*score: 2.4*
"This sentence have nothing to do with any other"
----Matched With
"Who is the “He” in this sentence?"
----Give a result of:
*Score: 1.0*
得分值是多少?它意味着什么?如果我想显示只有70%及以上相似性的结果该怎么办。
我如何解释分数结果,以便显示相似性百分比,我使用C#来完成,但不要担心实现。我不介意伪代码解决方案!
2条答案
按热度按时间o2g1uqev1#
当你使用MongoDB文本索引时,它会为每个匹配的文档生成一个分数。这个分数表示你的搜索字符串与文档匹配的程度。分数越高,与搜索到的文本相似的几率就越大。分数的计算方法是:
因此,正如我们可以看到上面的分数是由以下因素影响:
1.与实际搜索文本匹配的术语数,匹配越多,得分越高
1.文档字段中的令牌数
1.搜索的文本是否与文档字段完全匹配
以下是您的一个文档的派生:
用同样的方法,你可以推导出另一个。
如需了解更多详细的MongoDB分析,请查看:Mongo Scoring Algorithm Blog
uxhixvfz2#
文本搜索为索引字段中包含搜索项的每个文档分配一个分数。分数确定文档与给定搜索查询的相关性。
对于文档中的每个索引字段,MongoDB将匹配的数量乘以权重,并将结果相加,然后使用这个和,MongoDB计算文档的得分。
索引字段的默认权重为1。
https://docs.mongodb.com/manual/tutorial/control-results-of-text-search/