問題タブ [elasticsearch-aggregation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
elasticsearch - Elasticsearch: バケット値を使用して集計をフィルター処理する
質問の仕方がわからない。Elasticsearch 2.2 を使用しています。
5 つのドキュメントで構成されるデータセットの例から始めましょう。
called_entityには常にuuidがあります。 coverage_entityは空にすることも、uuidを持つこともできます。
スクリプトを使用して、called_entity.uuidまたはcoverage_entity.uuidのいずれかに集約します。
これで、集計によって、 header.called_entity.uuid または header.coverage_entity.uuid のいずれかから用語が生成されました。
集計キーの値を使用して集計をフィルター処理するにはどうすればよいですか? たとえば、バケットごとに、header.called_entity.uuidのみから取得されたuuidを持つドキュメントの数を数えたいとします。そんな感じ:
elasticsearch - Elasticsearch のバケット内の一意の用語
次のようなマッピングと例のデータがあります。
このような何百万ものレコードがあり、これはユーザー アクティビティ ログであるため重複もあり、日付列を使用して日付ヒストグラムの一意の userId に基づいてそれらをグループ化したいと考えています。カーディナリティを使用して、日付ヒストグラムに基づいて一意のカウントを取得するのは非常に簡単です。
一意のユーザー バケットに基づいて最終結果を取得し、ユーザー フィールドをグループ化し、次のようにプロファイルに基づいてカウントを取得する場合。1 月の時点で、約 10,000 のアクティビティがありましたが、ユニーク ユーザーは 1,000 人しかいませんでした。これらのユーザーに基づいて、ユーザー フィールド データを取得して人口統計を確認したいとします。10,000 レコードを意味し、userId でカーディナリティを実行すると、1,000 レコードになります。この 1,000 件のレコードに基づいて、次のような結果が必要です。10,000 レコードから個別の 1,000 レコードに統合する方法と、それらのレコードから、以下のような回答になります。
結論として、計算する一般的な方法はありますか?これは、用語を使用したり、パイプ集計を使用したりすることによって得られますか?
助けてください。
elasticsearch - ElasticSearch: 日時フィールドの集計
日時フィールドから集計情報を取得しようとしています:
- 月ごとにいくつのドキュメントがあるかを取得します (年/月ではなく、月のみ): つまり、'groupby(month(datetime_field))' です。
全てに感謝。
elasticsearch - Elasticsearch で一意の結果を返す
次のようなデータがあるユースケースがあります
予想された結果:
で一意のドキュメントを返したいparentid
。トップアグリゲーションを使用できますが、バケットをページ分割する方法がわかりません。parentid
同じよりも異なる可能性が高いためです。したがって、私のバケット配列は大きくなり、それらすべてを表示したいのですが、それらをページ付けします。
elasticsearch - クエリ フィルタリング ロジックをミラーリングするために、Elastic Search アグリゲーションを取得するにはどうすればよいですか?
私たちのサイトでは、ユーザーがカテゴリに分けられた一連のフィルターを使用して、Elastic Search の結果をフィルター処理できるようにしています。
これらは、次のように、ドキュメントのフィールドに表示されるリテラル タグに一致するだけです。
既存のクエリはすべてのフィルター条件を AND で結合しているため、ユーザーがA1
、B1
、および を選択するとB2
、 でフィルター処理され(A1 AND B1 AND B2)
ます。
これを「各フィルタ カテゴリ内の OR」と「カテゴリ全体の AND」に変更して、次のようにします(A1) AND (B1 OR B2)
。
さて、しわ: 「tags」フィールドで「terms」集計も使用して、次のフィルターの適用から返されるアイテムの数を予測します。UI では、次のようになります。
ここで、フィルター ロジックを AND/OR に変更すると、用語の集計がまだ予測中であるため、「用語」の集計から返されるカウントが中断されますA1 AND B1 AND B2
。追加B3
するとA1 AND B1 AND B2 AND B3
、結果の範囲が実際に広がるのに対し、集計からのカウントが狭まるため、結果が得られます (必要です(A1) AND (B1 OR B2 OR B3)
)。
フィルタリング ロジックと集計カウントが一致するように、これを集計で表現する方法はありますか?
elasticsearch - キバナで集計データをプロットする方法
私はkibanaの初心者です。ESに次のデータが保存されています。
したがって、基本的には、すでに集計されたデータである Campaign_id ごとにカウントがあります。campaign_id
X軸がカウントcampaign_id
され、Y軸がカウントされる場所ごとにカウントをプロットする単純な棒グラフが必要です。
campaign_id
カウント フィールドの実際の値ではなく、一意のカウントとして特定のヒットを取得しています。前もって感謝します!
elasticsearch - ElasticSearch Java API ソート集約
用語の集計があり、結果バケットを別のフィールド (日付) で並べ替える必要があります。または、最大 (およびトップ ヒット) と最小 (およびトップ ヒット) の 2 つのサブ集計を追加する必要があります。
これを可能にする API が見つかりませんでした。
メインタームの集計にmax subAggregation with top hitsを追加し、min with top hitsのサブアグリゲーションで別のtermアグリゲーションを作成できると思いますが、それは非常に重い作業になります。
elasticsearch - Elasticsearch 集計の結果を計算する
次の構造のドキュメントがあります。
このクエリを使用して 2 つの集計を適用しています。
これは私が得ている出力であり、まさに私が欲しいものです:
}
今私が欲しいのは、何らかの理由で 2 つの集計の出力を分割することです。上記のクエリでそれを行うにはどうすればよいですか。最終出力は私が望む唯一のものです。
更新: 私はこのクエリを使用してみました:
しかし、このエラーが発生します:"reason": "Invalid pipeline aggregation named [sessions] of type [bucket_script]. Only sibling pipeline aggregations are allowed at the top level"