20

インデックスがあり、elasticsearch の特定の 1 つのインデックスのすべてのタイプのエントリの数を取得したいのですが、事前にタイプがわからない場合があります。

したがって、たとえば、インデックスは

/events

タイプは

/events/type1
/events/type2
...
/events/typeN

そして、インデックスにクエリを実行して、「インデックス イベントの各タイプの数を教えてください」と言いたいので、次のような結果セットになる可能性があります。

/events/type1 : 40
/events/type2: 20
/events/typeN: 10

/events/_count が私に与える場所

/events: 70

編集

imotovの答えは素晴らしいです。ただし、JavaScript/Ajax で簡単に動作させる方法を理解するのに苦労しています。私は今このようなものを持っています:

$.ajax({
type: 'GET',
url: 'http://localhost:9200/events/_search?search_type=count',
data: '{ "facets" : { "count_by_type" : { "terms" : { "field": "_type" }}}}',
success: function(text) {
    console.log(text);
}
)}'

しかし、ES 内の要素の総数しか取得していないため、回答のファセット部分が欠落しているようです。

4

4 に答える 4

39

_typeフィールドで用語集計を使用して、次の情報を取得できます。

curl "localhost:9200/test-idx/_search?search_type=count" -d '{
    "aggs": {
        "count_by_type": {
            "terms": {
                "field": "_type"
            }
        }
    }
}'
于 2013-07-09T21:01:14.647 に答える
21

Elasticsearch v5.0 では、search_type=countが削除されました。上記の回答と同じクエリは、次のように記述できます。

GET  indexname/_search
{
    "aggs": {
        "count_by_type": {
            "terms": {
                "field": "_type"
            }
        }
    },
    "size": 0
}

参照: https://www.elastic.co/guide/en/elasticsearch/reference/5.0/breaking_50_search_changes.html#_literal_search_type_count_literal_removed

于 2016-11-04T22:47:30.507 に答える
3

@Askshay と @Roberto による回答は、別の重要な側面を強調しています。サイズを 0 に設定することは、特に低帯域幅のユースケース (モバイル ネットワークなど) では非常に重要です。これにより、データ ペイロードのサイズが削減され、ドキュメント サイズが大きい場合に大きな違いが生じます。メモ「サイズ」: 0

GET  index/_search
{
    "aggs": {
        "countByType": {
            "terms": {
                "field": "_type"
            }
        }
    },
    "size": 0
}
于 2016-11-16T14:29:45.620 に答える