python - 从elasticsearch获取字段的每个唯一组合的第一条记录

标签 python elasticsearch aggregation

我有一个Elasticsearch数据库,我上传这样的条目:{"s_food": "bread", "s_store": "Safeway", "s_date" : "2020-06-30", "l_run" : 28900, "l_covered": 1}当我将其上传到elasticsearch时,它会添加一个_id_type@timestamp_index字段。因此,条目看起来像这样:{"s_food": "bread", "s_store": "Safeway", "s_date" : "2020-06-30", "l_run" : 28900, "l_covered": 1, "_type": "_doc", "_index": "my_index", "_id": pe39u5hs874kee}我使用Elasticsearch数据库的方式导致相同的原始条目被多次上传。在此示例中,我只关心s_foods_datel_run字段是唯一的组合。由于条目太多,因此我想使用elasticsearch滚动工具浏览所有匹配项。到目前为止,在Elasticsearch中,我仅看到人们使用聚合来获取每个术语的存储区,然后在每个分区上进行迭代。我想使用类似聚合的方式为我关心的三个字段(食物,日期,运行)的每个唯一组合获取一个完整的条目(仅为1)。现在,我将聚集与滚动一起使用,如下所示:

GET /my-index/_search?scroll=25m
{
 size: 10000,
 aggs: {
  foods: {
   terms: {
    field: s_food
   },
    aggs: {
      dates: {
        terms: {
          field: s_date
        },
        aggs: {
          runs: {
            terms: {
              field: l_run
            }
          }
        }
      }
    }
  }
}

不幸的是,这只是给了我不需要的常规存储结构。还有什么我应该尝试的吗?

最佳答案

您所需要做的就是将热门匹配与size: 1结合使用。阅读更多关于top-hits聚合here的信息。
查询如下所示:

{
  "size": 10000,
  "aggs": {
    "foods": {
      "terms": {
        "field": "s_food"
      },
      "aggs": {
        "dates": {
          "terms": {
            "field": "s_date"
          },
          "aggs": {
            "runs": {
              "terms": {
                "field": "l_run"
              },
              "aggs": {
                "topOne": {
                  "top_hits": {
                    "size": 1
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

关于python - 从elasticsearch获取字段的每个唯一组合的第一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62667202/

相关文章:

python - 用 Pandas 从excel中读取大量数据

elasticsearch - 在Elasticsearch中计算范围和术语

node.js - 该字段必须是mongo中的累加器对象

python - 计算列表中每个项目在 pandas 数据框列中出现的次数,用逗号分隔值以及其他列的附加聚合

python - 参数 Django 中的斜杠

python - 为什么类型强制在脚本/交互式提示上的工作方式不同?

elasticsearch - ElasticSearch Kibana bin文件夹没有plugin.bat

php - Elasticsearch 更新legal_argument_exception

elasticsearch - 使用 ElasticSearch 获取类别的所有可能聚合

python - 使用opencv获得所需帧率的imshow()