如何在elasticsearch dsl python中动态创建组合Q查询?我浏览了文档和这篇SO 帖子。我构建了一个包含所有必需信息的 q_query 字典。
ipdb> q_queries
{'queries': [{'status': 'PASS'}, {'status': 'FAIL'}, {'status': 'ABSE'}, {'status': 'WITH'}], 'operation': 'or'}
我想执行以下 q_query
qq=Q("match", status='PASS') | Q("match", status="FAIL") | Q("match", status="ABSE") | Q("match", status="WITH")
对于以下的 dict 列表
ipdb> [Q('match', **z) for z in q_queries['queries']]
[Match(status='PASS'), Match(status='FAIL'), Match(status='ABSE'), Match(status='WITH')]
但是如何将多个 Q 与 or 运算符或 and 运算符结合起来呢?上面对应elasticsearch raw query
的是什么?我尝试了以下,因为我必须根据 test_id 进行过滤。
{
"query": {
"bool": {
"must": [
{ "match": { "test_id": "7" }},
{
"range": {
"created": {
"gte": "2016-01-01",
"lte": "2016-01-31"
}
}
}
],
"should": [
{ "match": { "status": "PASS"}},
{ "match": { "status": "FAIL"}}
]
}
}
}
但是结果并不像我预期的那样我没有相同的查询,should filter
并且获得的结果是相同的。所以在我的情况下,过滤器应该不是由弹性搜索执行的。任何帮助深表感谢。
TIA