Elasticsearchドキュメント 提案する*そのコードの一部
*ドキュメントの修正
GET /cars/transactions/_search?search_type=count
{
"aggs": {
"distinct_colors": {
"cardinality": {
"field": "color"
}
}
}
}
sQLクエリに対応
SELECT DISTINCT(color) FROM cars
しかし、実際には
SELECT COUNT(DISTINCT(color)) FROM cars
私が持っている個別の値の数は知りたくありませんが、個別の値は何ですか。誰もそれを達成する方法を知っていますか?
color
フィールドで terms aggregate を使用します。そして、個別の値を取得したいフィールドの分析方法に注意を払う必要があります。つまり、インデックス作成中にトークン化しないことを確認する必要があります。フィールドの内容。
それでもトークン化が必要で、terms
集計を使用する場合は、not_analyzed
そのフィールドのインデックスの種類。おそらく multi fields を使用します。
車の用語集約:
GET /cars/transactions/_search?search_type=count
{
"aggs": {
"distinct_colors": {
"terms": {
"field": "color",
"size": 1000
}
}
}
}
Andrei Stefanからの優れた回答を更新するには、クエリパラメータsearch_type=count
はElasticsearch 5ではサポートされなくなりました。これを行う新しい方法は、"size" : 0
などの本文:
GET /cars/transactions/_search
{
"size": 0,
"aggs": {
"distinct_colors": {
"terms": {
"field": "color",
"size": 1000
}
}
}
}
個人的には、両方の答えは私にとって不可解であり、複数のフィルターを追加したいときは絶望的に複雑でした。
私にとって理にかなったことは、[検出]タブに移動して、必要なフィルターを適用することでした。その後、検索を保存しました。
次に、保存した検索を使用して新しい棒グラフの視覚化を作成しました。次に、関心のあるフィールド(この場合はユーザー名)に基づいて用語の集計を使用するようにX軸を変更し、カウントで並べ替えます。サイズが500などの大きなものであることを確認します。
チャートの下に表形式で結果を取得できるはずです。シンプルで複雑なJSONプログラミングはありません。数回クリックするだけです。視覚化を保存して後で使用することもできます。