python - 计算 ElasticSearch 索引中某个字段的实例数

标签 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
}

这可以通过单个查询实现吗?或多个?就其值(value)而言,我正在使用 python elasticsearchelasticsearch-dsl客户。

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

使用 Solr 后,我仍然了解 ES。预先感谢您的任何建议。

最佳答案

下面将返回带有“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"
        }
      }
    }
  }
}

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

关于python - 计算 ElasticSearch 索引中某个字段的实例数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46527110/

相关文章:

elasticsearch - 通过 url 设置 Kibana 仪表板过滤器

python - 线程和进程混合的奇怪行为

python - 如何提取图中所有包含峰的曲线的斜率?

python - 根据已知角值估计数字矩阵?

elasticsearch - 如何在 elasticsearch 中使用 OR 操作添加多个存在的字段

elasticsearch - 嵌套得分函数中的 Max score_mode 取平均值

node.js - 我们如何从elasticsearch索引中获取最后一个文档?

ruby-on-rails - rails : Elasticsearch :through association mapping

python - 为什么 list+set 使列表唯一的方法比字典键方法更快?

python - 如何一次打印多个项目