2017-08-15 84 views
1

我面臨以下問題。我對索引中的特定記錄組進行了一些排序查詢,類似於下面的查詢,其中term1匹配值針對每個查詢而變化,而對於term2,它們對於所有查詢都保持靜態。Elasticsearch組排序的組合查詢

{ 
    "query": { 
     "bool": { 
      "must": { 
       "terms": { 
        "term1": [ "val1", "val2" ] 
       } 
      }, 
      "must_not": { 
       "terms": { 
        "term2": [ "val3", "val4" ] 
       } 
      } 
     } 
    }, 
    "sort": [ 
     { "sort_term": "desc" } 
    ], 
    "from": 0, 
    "size": 10 
} 

現在,我單獨執行這些查詢,然後合併和洗牌的代碼的結果,這東西,你可能會說是不理想的。我想知道是否有辦法在ElasticSearch中結合這些查詢,同時維護基於組的排序。

我想維護每個單獨查詢的排序順序的原因是因爲排序值不統一,我不希望來自不同組的結果被隱藏在結果集中。

我能想到的唯一解決方案是以某種方式重新處理所有記錄並根據給定組中所有記錄的排序值計算相對排序值,但這些值非常有規律地變化,並且索引有大量的記錄,所以這可能是矯枉過正。

任何想法將不勝感激!

回答

0

您可以在排序數組中使用多個條款。如果您結合查詢,我會首先按_type排序,這可以防止混淆搜索結果。您的查詢的排序字段應該是這樣的:

"sort": [ 
    { "_type": "desc" }, 
    { "sort_term_query1": "desc" }, 
    { "sort_term_query2": "desc" }, 
], 
+0

我知道我可以使用多個排序術語,但在這種情況下,我的所有查詢都使用相同的排序術語。我想要做的是單獨對每個布爾項進行排序,並混合結果。 – OrfeasZ

+0

然後我不明白你的問題,它不清楚最終結果應該如何排序。 – MartinSchulze