匹配elasticsearch中的字段值组合列表
Posted
技术标签:
【中文标题】匹配elasticsearch中的字段值组合列表【英文标题】:Match on a list of field value combinations in elasticsearch 【发布时间】:2017-04-24 13:45:55 【问题描述】:我有一个值元组列表,如下所示:
[("a1", "b1", "b1"), ("a2", "b2", "b3")... ("a_n", "b_n", "c_n")]
这些是字段“a”、“b”和“c”的值集,我想用它们来匹配 elasticsearch 中的文档。我该如何进行这种类型的多字段术语查询,其中必须按照上面定义的集合进行匹配?
编辑:
我尝试使用这样的布尔查询:
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 query 是您要找的。span> 是的,除了布尔查询,您还必须对数据进行一些建模。您可能需要嵌套数据类型。看看嵌套数据类型 【参考方案1】:如果可能,您应该将它们索引到单个 keyword
字段中,并使用 a1-b1-c1
等分隔符,然后将单个 terms
过滤器与您要查找的值数组一起使用。
【讨论】:
以上是关于匹配elasticsearch中的字段值组合列表的主要内容,如果未能解决你的问题,请参考以下文章