2017-06-05 10 views
1

"arrivalDate"というフィールドがあり、このフィールドは文字列です。各ドキュメントには、arrivalDate(文字列形式)(例:20110128)があります。PHPのElasticsearchクエリから集計された結果をすべて表示

日:私は私の出力はこのような何か(日付とその日付を持つレコードの数)になりたい多くのレコードは、その日付を持っているか

20110105:5つのレコードが

20120501: 2つのレコードの

20120602:15個の記録

私はすでに、これらの結果を取得するクエリを持っています。

私はElasticsearchから集計結果をPHPに表示しようとしています。

日:5レコードが

20120501::2レコードが

20120602:15の記録 これが何であるか、その日に

20110105を持っているどのように多くのレコードを私は私の出力はこのような何かになりたいです私は今のところ:

$json = '{"aggs": { "group_by_date": { "terms": { "field": "arrivalDate" } } } }'; 

     $params = [ 
      'index' => 'pickups', 
      'type' => 'external', 
      'body' => $json 
      ]; 

$results = $es->search($params); 

しかし、私はどのように結果をPHPで表示するのか分かりません。たとえば、私がやるべき文書の総数を表示したいのであればecho $results['hits']['total']すべての日付をPHPのレコード数でどのように表示できますか?

+0

あなたの '$ results'配列はどのように見えますか? – Auris

+1

@Aurisこれは、私がKibanaでスクリプトを実行した場合、すべての情報を含んでいます。これはヒット数、合計数、サンプルドキュメント、およびいくつかのドキュメントの集計を含んでいます – user2896120

+0

@Aurisこれは配列の集約部分です。これは単なるスニペットです:[集計] =>配列([group_by_date] =>配列([doc_count_error_upper_bound ]] => 11058 [sum_other_doc_count] => 818008 [バケット] =>配列([0] =>配列([キー] => 20160614 [doc_count] => 18462)))))))))))) – user2896120

答えて

0

クエリを構築するのと同じ方法で集計を使用することをお勧めします。私の経験からは、より速く動作するようです。代わりに、典型的なresults['hits']['hits']を使用してのあなたはresults['aggregations']にヒット部品を切り替えるだろう、ということに続き

'aggs' => [ 
    'group_by_date' => [ 
     'terms' => [ 
      'field' => 'arrivalDate', 
      'size' => 500 
     ] 
    ] 
] 

:以下のコードを参照してください。その後、応答内のバケットにアクセスして戻りデータにアクセスします。しかし、上記のループ配列内の配列にアクセスするためのより良い方法があるでしょう

foreach ($results as $result){ 
    foreach($result['buckets'] as $record){ 
     echo($record['key']); 
    } 
} 

上図の集計からデータにアクセスするために、それは可能性の線に沿って何かだろうシステムは私のためにうまくいく。データへのアクセスに問題がある場合は、教えてください。

関連する問題