0

我正在尝试查询 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,所以我最终浪费了一个查询并且无法访问实际结果,所以我希望这种过滤发生在查询级别。

4

1 回答 1

1

您可以尝试使用此过滤查询

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

我认为您还可以将排序添加到查询中

于 2017-03-31T15:37:54.767 回答