Python elasticsearch return 仅具有特定字段的条目

Python elasticsearch return only entries that have a certain field

我正在尝试查询 Elasticsearch,但只获得具有特定字段的结果。

如何查询包含字段 fields.EventData.PGID 的文档并忽略不包含字段的文档?

datadict = es.search(index=idx1, 
                     q='run_id:"Run001" AND "fields.EventData.PGID exists"', 
                     sort='fields.System.TimeCreated.SystemTime',
                     size=1000)

在 ES 中记录事件的方式不一致,因此我只需要找到记录了 PGID 的事件。我尝试在 Python 代码中执行一个 try 块,尝试从返回值访问该字段,如果出现 KeyError 则忽略它,但由于查询结果中可以接收的项目数量有限,在在某些情况下,我的所有结果都缺少 PGID,所以我最终只是浪费了一个查询,无法访问实际结果,所以我希望这种过滤发生在查询级别。

您可以尝试使用这个过滤后的查询

{
  "size": 1000,
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must": {
            "exists": {
              "field": "fields.EventData.PGID"
            },
            "term": {
              "run_id": "Run001"
            }
          }
        }
      }
    }
  }
}

我想你也可以将排序添加到查询中