2017-08-15 13 views
1

私は次の問題に直面しています。クエリごとに一致する値がterm1であり、term2はすべてのクエリに対して静的であるのに対し、インデックスには特定のレコードグループに対していくつかのソートされたクエリがあります。今弾性検索グループの組み合わせクエリの並べ替え

{ 
    "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

関連する問題