0

私のインデックス PublicationsLikes のマッピングは次のとおりです。

  • id : 文字列
  • アカウント : 文字列
  • api : 文字列
  • date : 日付

現在、ES で集計を行っており、結果カウントを (出版物の) ID でグループ化しています。

{
    "key": "<publicationId-1>",
    "doc_count": 25
},
{
    "key": "<publicationId-2>",
    "doc_count": 387
},
{
    "key": "<publicationId-3>",
    "doc_count": 7831
}

返された「キー」(ID) は情報ですが、アカウントや API などのパブリケーションの別のフィールドも選択する必要があります。そのようなビット:

{
   "key": "<publicationId-1>",
   "api": "Facebook",
   "accountId": "65465z4fe6ezf456ezdf",
   "doc_count": 25
},
{
  "key": "<publicationId-2>",
  "api": "Twitter",
  "accountId": "afaez5f4eaz",
  "doc_count": 387
}

どうすればこれを管理できますか?

ありがとう。

4

3 に答える 3

1

top_hitsこの要件は、各バケット内のドキュメントを並べ替えて最初のものを選択し、返されるフィールドを制御できる集約によって最もよく達成されます。

{
  "size": 0,
  "aggs": {
    "publications": {
      "terms": {
        "field": "id"
      },
      "aggs": {
        "sample": {
          "top_hits": {
            "size": 1,
            "_source": ["api","accountId"]
          }
        }
      }
    }
  }
}
于 2016-11-30T01:30:46.437 に答える
0

お二方、素早い回答ありがとうございます。最初の解決策が最も「美しい」と思いますが(リクエストの点だけでなく、結果の取得に関しても)、どちらもサブ集計クエリのようです。

{ "size": 0, "aggs": { "publications": { "terms": { "size": 0, "field": "publicationId" }, "aggs": { "sample": { "top_hits": { "size": 1, "_source": ["accountId", "api"] } } } } } }

size=0 パラメータには注意が必要だと思うので、Java Api で作業しているため、0 の代わりに INT.Max を配置することにしました。

ありがとうございます。

于 2016-11-30T10:49:56.613 に答える