2017-08-30 72 views
0

有誰知道是否可以在elasticsearch中自定義排序嗎?Elasticsearch中的自定義排序

我對類別字段進行了排序。按類別將所有記錄分組在一起。這很好。

然而,你可以給排序例如汽車,書籍,食物。

它會先顯示汽車,然後是書籍和食物?

+0

可以請你告訴我們,你有什麼樣的數據模型和什麼類型的你正在運行的查詢,絕對function_score將解決您的問題,但我們可以得到一個更高性能的解決方案,如果我可以看到模型和查詢。 – user3775217

+0

請發佈樣本文件,以便我們瞭解汽車,書籍和食物是:/ –

回答

1

可以使用function_score query,是這樣的:

{ 
    "query": { 
     "function_score": { 
      "query": { "match_all": {} }, 
      "boost": "5", 
      "functions": [ 
       { 
        "filter": { "match": { "category": "cars" } }, 
        "weight": 100 
       }, 
       { 
        "filter": { "match": { "category": "books" } }, 
        "weight": 50 
       }, 
       { 
        "filter": { "match": { "category": "food" } }, 
        "weight": 1 
       } 
      ], 
      "score_mode": "max", 
      "boost_mode": "replace" 
     } 
    } 
} 

你在哪裏,當然,放取查詢您現在正在使用的,而不是match_all查詢,並留下關閉sort(默認是分數,這就是你想要的)。

這是取代elasticsearch通常生成的分數,每個分類都有一個自定義分數。您可以嘗試其他boost_mode以便在類別中獲得合理的排名。如果您需要了解得分情況,可以將"explain": true添加到頂級查詢中。