relevances scores 相關性分數
預設情況下,Elasticsearch 通過 relevance score對查詢結果進行排序,relevance score衡量每個文件匹配查詢的程度。
relevance score是一個正的浮點數,在搜尋API的_score
後設資料欄位中返回。_score越高,說明文件越相關。雖然每種查詢型別可以以不同的方式計算相關性得分,但得分計算還取決於查詢子句是在查詢上下文中執行還是在篩選器上下文中執行。
Query context
在查詢上下文中,查詢子句回答“該文件與該查詢子句的匹配程度如何?”除了決定文件是否匹配外,查詢子句還在_score後設資料欄位中計算一個相關性得分。
只要將查詢子句傳遞給查詢引數(例如搜尋API中的查詢引數),查詢上下文就會生效。
Filter context
在篩選器上下文中,查詢子句回答“這個文件匹配這個查詢子句嗎?”答案是簡單的“是”或“否”——不計算分數。過濾上下文主要用於過濾結構化資料,例如:
- 這個時間戳是在2015年到2016年之間嗎?
- 狀態欄位是否設定為“已釋出”?
Elasticsearch會自動快取經常使用的過濾器,以提高效能。
過濾器上下文在將查詢子句傳遞給過濾器引數時生效,比如bool查詢中的Filter
或must_no
t引數、constant_score查詢中的Filter
引數或過濾器聚合。
Example of query and fileter contexts
下面是在搜尋API的查詢和篩選上下文中使用查詢子句的示例。該查詢將匹配滿足以下所有條件的文件:
title
欄位包含單詞search
content
欄位包含單詞elasticsearch
status
欄位包含精確欄位published
publisg_date
欄位包含 從2015年1月起的日期GET /_search { "query": { "bool": { "must": [ { "match": { "title": "Search" }}, { "match": { "content": "Elasticsearch" }} ], "filter": [ { "term": { "status": "published" }}, { "range": { "publish_date": { "gte": "2015-01-01" }}} ] } } }
query
參數列示查詢上下文bool
和兩個match
子句用於查詢上下文中,這表示它們用於為每個文件的匹配情況打分。filter
參數列示過濾上下文。’term’和’range’子句用於查詢上下文中。它們會過濾掉不匹配的文件,但是它們不會影響匹配文件的得分。警告:在查詢上下文中為查詢計算的分數用單精度浮點數表示,他們只有24位的有效數的精度。超過有效數精度的分數計算將被轉換為浮點數,並且會損失精度。
提示:在查詢上下文中使用查詢子句來處理應該影響匹配文件得分的條件(即文件匹配的好壞),並在過濾器上下文中使用所有其他查詢子句。
本作品採用《CC 協議》,轉載必須註明作者和本文連結