Prz*_*ita 10 lucene search scoring 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")))
);
Run Code Online (Sandbox Code Playgroud)
这被转换为这样的JSON查询:
{
"from": 0,
"size": 300,
"explain": true,
"query": {
"match": {
"Name": {
"query": "ExampleName"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
搜索执行的文档大约有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
Run Code Online (Sandbox Code Playgroud)
其中第一个字段只是一个Id,第二个是ElasticSearch执行搜索的名称字段,第三个是得分.
如您所见,ES索引中有许多重复项.由于一些已发现的文档具有不同的分数,尽管它们完全相同(只有不同的Id),我得出结论,不同的分片在整个数据集的不同部分上进行搜索,这使我得出结论,分数在某种程度上基于整体给定分片中的数据,而不仅仅是搜索引擎实际考虑的文档.
问题是,这个得分究竟是如何运作的?我的意思是,你能告诉我/给我看/给我一个确切的公式来计算ES发现的每个文件的分数吗?最终,这个评分机制如何改变?
fem*_*gon 13
默认评分是核心Lucene中的DefaultSimilarity算法,这里主要记录在案.您可以通过配置自己的Similarity
评分或使用类似custom_score
查询的方式来自定义评分.
显示的前五个结果中的奇数分数变化看起来很小,以至于它与我的关系不大,只要查询结果的有效性及其排序,但如果你想了解它的原因,explain
api可以显示你究竟发生了什么.
归档时间: |
|
查看次数: |
14061 次 |
最近记录: |