我有一个值元组列表,如下所示:
[("a1", "b1", "b1"), ("a2", "b2", "b3")... ("a_n", "b_n", "c_n")]
这些是字段“a”,“b”和“c”的值集,我想用它来匹配elasticsearch中的文档。我怎样才能进行这种类型的多字段术语查询,其中匹配必须在上面定义的集合中进行?
修改:
我尝试使用像这样的bool查询:
query={
"query": {
"bool": {
"should": [{
"bool": {
"must":[
{"term": {"a": a_val}},
{"term": {"b": b_val}},
{"term": {"c": c_val}}
]
}
}
for (a_val, b_val, c_val) in identifiers
]
},
},
}
es.search('my_index', body=query)
但结果是:
TransportError(400, 'search_phase_execution_exception', 'failed to create query:...
我还尝试了一个更简单的bool查询版本,但得到了完全相同的错误:
query = {
"query": {
"bool": {
"must": [
{"term": {"a": "a1"}},
{"term": {"b": "b1"}},
{"term": {"c": "c1"}}
]
},
},
}
es.search('my_index', body=query)
我对这些bool查询做错了什么?
答案 0 :(得分:0)
如果可能,您应该将它们编入单个keyword
字段,并使用a1-b1-c1
等分隔符,然后使用单个terms
过滤器,其中包含您要查找的值数组。