我在尋找的是ElasticSearch(Lucene)默認評分機制如何真正起作用的簡單明瞭的解釋。我的意思是,它是使用Lucene得分還是使用自己的得分?ElasticSearch默認評分機制
例如,我想通過例如「名稱」字段來搜索文檔。我使用.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"
}
}
}
}
有是執行搜索約1.1萬份文件。我得到的回報,是(這僅僅是結果的一部分,格式化我自己):
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找到的每個文檔的得分嗎?最終,這種評分機制如何改變?
好的,這幾乎涵蓋了我想知道的。 ES純粹使用Lucene的相似性的信息非常有用。謝謝! –
有關Lucene評分算法中因素的更多細節:http://www.lucenetutorial.com/advanced-topics/scoring.html – ThoQ