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"
}
}
}
}
}
}
}
我想你也可以将排序添加到查询中
我正在尝试查询 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"
}
}
}
}
}
}
}
我想你也可以将排序添加到查询中