使用Elasticsearch进行复杂搜索

时间:2019-07-19 12:56:59

标签: elasticsearch

我一直很难在ES中形成搜索请求。 现在,我必须将代码从v.2更新到v.6,但有很多不同。 当前问题:如何制定复杂的orand搜索? 现在我有:

{
    "index":"<index>",
    "type":"<type>",
    "body":{
        "from":0,
        "size":20,
        "query":{
            "bool":{
                "must":{
                    "or":{
                        "match":{
                            "CUSTNR":"24508"
                        },
                        "and":{
                            "prefix":[
                                {
                                    "ORDERNR":"128"
                                }
                            ]
                        }
                    }
                }
            }
        }
    }
}

,我收到消息:{"type":"parsing_exception","reason":"no [query] registered for [or]"

我应该怎么写?

1 个答案:

答案 0 :(得分:0)

elasticsearch 6或更高版本中没有所谓的AND / OR,它是通过这种方式映射的

  1. AND 必须为
  2. OR
  3. NOR 不应

因此,如果您想查看所有具有 CUSTNR = 24508 AND ORDERNR =(128 OR 129)的客户,那么我们可以像下面的那样构建查询,其中bool表示我们正在使用布尔值运算符

{
    "query": {
        "bool": {   
            "must": [
                {
                    "term": {"CUSTNR ": 24508 }
                },
                {
                    "bool": {
                        "should": [
                            {"term": {"ORDERNR ": 128}},
                            {"term": {"ORDERNR ": 129}}
                        ]
                    }
                }
            ]
        }
    }
}

添加了一个示例复杂查询,以帮助您了解如何形成必须,应该,排序等。

https://gist.github.com/sany2k8/ec0145738babca643f0a369e55546c85