[英]elasticsearch giving more weight to different fields and scenarios
我有這個ES查詢:
{
"query": {
"bool": {
"should": [
{
"multi_match": {
"query": "test",
"fields": [
"name^-1.0",
"id^-1.0",
"address.city^-1.0",
"address.street^-1.0"
],
"type": "phrase_prefix",
"lenient": "true"
}
}
],
"boost": 1.0,
"minimum_should_match": "1"
}
},
"from": 0,
"size": 20
}
當前發生的是,當我搜索名稱為john
,我會得到一堆結果,其中id, address.city, address.street
包含john,這很好,但是我希望name
更重要,而且如果我在es中有2個人john
和2個人這樣的名字,例如george john
我希望公正的john
首先出現。
我能做到嗎? :)
要使任何字段都比其他字段更重要,可以將其增強值設置為更高的值。 所以,如果fieldA^4
和fieldB^1
則意味着fieldA
是4倍以上更重要fieldB
。 因此,您可以給name
字段賦予更高的提升值,使其對得分更重要。
對於第二點, name
字段值為john
的文檔將比name
字段值為george john
的文檔得分更高(假設兩個文檔中其他字段的數據相同) 。 之所以得到第二個文檔(喬治約翰) ,是因為您將所有字段的值都設為負值。
所以要兼顧您的兩點
name
帶來更高的提升 因此查詢應如下所示:
{
//"explain": true,
"query": {
"bool": {
"should": [
{
"multi_match": {
"query": "john",
"fields": [
"name^4.0",
"id^1.0",
"address.city^1.0",
"address.street^1.0"
],
"type": "phrase_prefix",
"lenient": "true"
}
}
],
"boost": 1,
"minimum_should_match": "1"
}
},
"from": 0,
"size": 20
}
要了解有關彈性如何計算匹配文檔的分數的更多信息,可以在查詢中使用"explain": true
。 這將給出結果的詳細步驟,由Elastic進行計算以計算分數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.