匹配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中的字段值组合列表的主要内容,如果未能解决你的问题,请参考以下文章

仅获取ElasticSearch中的匹配值和相应字段

将组合框的值作为字段传递

Go Elasticsearch 查询快速入门

Go Elasticsearch 查询快速入门

Elasticsearch 多字段值匹配

Elasticsearch系列(13)Query之全文查询