2016-04-09 8 views
0

ElasticsearchでユニオンのようなSQLを行う方法がわからない。私はboolクエリを試しましたが、まだ私の要件を満たしていません。例えば、文書構造は、私は、各「カテゴリ」でトップ5マッチ「タイトル」を見つける必要がありElasticsearchユニオンクエリを実行する単一の要求トップN

{ 
    "id": "123", 
    "authorId": 28, 
    "title": "Five Ways to Tap into...", 
    "byLine": "ashd jsabbdjs international", 
    "category": "Cat1" 
} 

ときに、ユーザーの種類のものです。これは、Elasticsearchへの複数のクエリを使用して行うことができますが、私は1つの要求でそれを行う他の方法があるかどうか疑問に思っていました。

答えて

1

top_hitsサブアグリゲーションで集約を使用します。

{ 
    "size": 0, 
    "query": {"match_all": {}}, 
    "aggs": { 
    "categories": { 
     "terms": { 
     "field": "category", 
     "size": 10 
     }, 
     "aggs": { 
     "top_5": { 
      "top_hits": { 
      "size": 5 
      } 
     } 
     } 
    } 
    } 
} 
+0

どうもありがとうアンドレイです。できます! – Jay

0

ここ「カテゴリ」に基づくマルチバケットを返すクエリ

{ 
    "size": 0, 
    "query": { 
     "bool": { 
     "must": [ 
      { 
       "terms": { 
        "authorId": [ 
        1, 
        28 
        ] 
       } 
      } 
     ], 
     "should": [ 
      { 
       "query_string": { 
        "query": "*int*", 
        "fields": [ 
        "title^2", 
        "byLine^1" 
        ] 
       } 
      } 
     ] 
     } 
    }, 
    "aggs": { 
     "categories": { 
     "terms": { 
      "field": "category", 
      "size": 10 
     }, 
     "aggs": { 
      "top_5": { 
       "top_hits": { 
        "size": 5 
       } 
      } 
     } 
     } 
    } 
} 
関連する問題