匹配elasticsearch

时间:2017-04-24 13:45:56

标签: elasticsearch

我有一个值元组列表,如下所示:

[("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查询做错了什么?

1 个答案:

答案 0 :(得分:0)

如果可能,您应该将它们编入单个keyword字段,并使用a1-b1-c1等分隔符,然后使用单个terms过滤器,其中包含您要查找的值数组。