Elasticsearch查询和索引聚合

时间:2019-03-06 09:16:28

标签: elasticsearch elasticsearch-aggregation

我有多个Elasticsearch索引,我想获得doc_count的数量以符合每个索引的查询的条件(即使没有文档匹配该索引)。我尝试了这一点(使用elasticsearch.js):

{
  index: 'one,or,many,indices,here',
  query: {
    query_string: {
      query: 'hello',
    },
  },
  aggs: {
    group_by_index: {
      terms: {
        field: '_index',
        min_doc_count: 0,
      },
    },
  },
  from: 0,
  size: 20,
};

仅当我在index键上指定所有索引时,此方法才有效。但是,我并不总是希望在搜索结果中匹配所有索引中的文档。

所以我想到了:

{
  index: 'all,indices,here',
  query: {
    bool: {
      must: [
        {
          query_string: {
            query: 'hello',
          },
        },
        {
          terms: {
            _index: 'only,search,hits,indices,here',
          },
        },
      ],
    },
  },
  aggs: {
    group_by_index: {
      terms: {
        field: '_index',
        min_doc_count: 0,
      },
    },
  },
  from: 0,
  size: 20,
};

但是随后我得到doc_count: 0的匹配索引,因为该索引不在布尔查询中。

如何获取所有索引的doc_count,但不能从不需要的索引中获得搜索匹配?

1 个答案:

答案 0 :(得分:1)

您需要将索引约束移至post_filter

{
  index: 'all,indices,here',
  query: {
    bool: {
      must: [
        {
          query_string: {
            query: 'hello',
          },
        },
      ],
    },
  },
  aggs: {
    group_by_index: {
      terms: {
        field: '_index',
        min_doc_count: 0,
      },
    },
  },
  post_filter: {
    terms: {
      _index: 'only,search,hits,indices,here',
    },
  },
  from: 0,
  size: 20,
};