2016-01-22 59 views
1

我想對結果進行排序,以便如果某個特定字段(比如'first_name')等於確切值(比如'Bob'),那麼首先返回那些文檔。Elasticsearch,按確切字符串匹配排序

這將導致所有的文檔,其中first_name正好是'Bob',會先返回,然後是所有其他文檔。請注意,我並不打算排除first_name不是「Bob」的文檔,只需對它們進行排序,使它們在所有Bob之後返回。

我明白Elasticsearch是如何進行數字或字母排序的,但是我找不到涵蓋這種排序類型的文檔的任何部分。

這是可能的,如果是這樣,如何?

回答

2

一個解決方案是操縱名字字段中包含Bob的結果的分數。

例如:

POST /test/users 
{ 
    "name": "Bob" 
} 

POST /test/users 
{ 
    "name": "Alice" 
} 

GET /test/users/_search 
{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "match": { 
      "name": { 
       "query": "Bob", 
       "boost" : 2 
      } 
      } 
     }, 
     { 
      "match_all": {} 
     } 
     ] 
    } 
    } 
} 

會以該順序同時返回Bob和Alice(以1和0.2近似分數分別)。

the book

查詢的時間提升的主要工具,您可以使用調整 相關性。任何類型的查詢都會接受一個提升參數。設置一個 增加2不會簡單地加倍最後的_score;應用的實際提升值 經過規範化和一些內部優化。然而,它確實意味着,隨着2 升壓的條款是兩倍重要的,因爲與1

升壓的條款含義,如果你也想「弗雷德」的到來提前鮑勃你可以只在上面的例子中用3個因子提升它。