ElasticSearch默认评分机制

我要寻找的是关于ElasticSearch(Lucene)的默认评分机制实际工作方式的简单明了的解释。我的意思是,它使用Lucene评分,还是使用自己的评分?

例如,我想通过“名称”字段搜索文档。我使用.NET NEST客户端编写查询。让我们考虑这种查询:

IQueryResponse<SomeEntity> queryResult = client.Search<SomeEntity>(s =>

s.From(0)

.Size(300)

.Explain()

.Query(q => q.Match(a => a.OnField(q.Resolve(f => f.Name)).QueryString("ExampleName")))

);

转换为此类JSON查询:

{

"from": 0,

"size": 300,

"explain": true,

"query": {

"match": {

"Name": {

"query": "ExampleName"

}

}

}

}

搜索大约有110万个文档。我得到的回报是(这只是结果的一部分,由我自己格式化):

650   "ExampleName" 7,313398

651 "ExampleName" 7,313398

652 "ExampleName" 7,313398

653 "ExampleName" 7,239194

654 "ExampleName" 7,239194

860 "ExampleName of Something" 4,5708737

其中第一个字段只是一个ID,第二个字段是名称字段,ElasticSearch在其上执行搜索,第三个字段是得分。

如您所见,ES索引中有很多重复项。由于找到的一些文档具有不同的分数,尽管它们完全相同(仅具有不同的Id),所以我得出结论,不同碎片对整个数据集的不同部分执行搜索,这使我得出结论,该分数在一定程度上基于总体给定分片中的数据,而不是专门由搜索引擎实际考虑的文档中的数据。

问题是,这个评分到底如何工作?我的意思是,您能告诉我/告诉我/指出我精确的公式来计算ES找到的每个文档的分数吗?最终,如何改变这种评分机制?

回答:

默认评分是核心Lucene中的DefaultSimilarity算法,在此处大量记录。您可以通过配置自己的Similarity得分或使用类似custom_score查询的方法自定义得分。

就查询结果及其排序的有效性而言,显示的前五个结果中的奇数分数变化似乎很小,以至于我不太关心它,但是如果您想了解其原因,则explainapi可以显示你到底是怎么回事。

以上是 ElasticSearch默认评分机制 的全部内容, 来源链接: utcz.com/qa/422366.html

回到顶部