计算ElasticSearch索引中字段的实例

时间:2017-10-02 14:06:11

标签: python elasticsearch

我很好奇在给定的ElasticSearch索引中计算特定字段实例的所有文档的最佳方法。

例如,如果我在索引goober中有以下文档:

{
    '_id':'foo',
    'field1':'a value',
    'field2':'a value'
},
{
    '_id':'bar',
    'field1':'a value',
    'field2':'a value'
},
{
    '_id':'baz',
    'field1':'a value',
    'field3':'a value'
}

我想知道以下内容:

{
    'index':'goober',
    'field_counts':
        'field1':3,
        'field2':2,
        'field3':1
}

单个查询是否可行?还是多个?对于它的价值,我使用的是python elasticsearchelasticsearch-dsl个客户。

我已成功向GET发出/goober请求并检索了映射,并且我正在学习如何为每个字段提交聚合请求,但我有兴趣了解一次特定字段出现在所有文档中。

来自使用Solr,仍然与ES有关。提前感谢任何建议。

1 个答案:

答案 0 :(得分:1)

以下内容将返回“field2”的文档数:

POST /INDEX/_search
{
  "size": 0, 
  "query": {
    "bool": {
      "filter": {
        "exists": {
          "field": "field2"
        }
      }
    }
  }
}

这是一个使用多个聚合的示例(将使用计数返回存储桶中的每个聚合),使用字段存在计数:

POST /INDEX/_search
{
  "size": 0,
  "aggs": {
    "field_has1": {
      "filter": {
        "exists": {
          "field": "field1"
        }
      }
    },
    "field_has2": {
      "filter": {
        "exists": {
          "field": "field2"
        }
      }
    }
  }
}

第二个示例中每个agg内的行为将模仿第一个查询的行为。在许多情况下,您可以进行常规搜索查询并将这些查找嵌套在聚合桶中。