使用 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]"

我应该怎么写?

在 elasticsearch 6 或更高版本中没有所谓的 AND/OR 的东西,它是这样映射的

  1. 并且 是必须的
  2. 应该是应该
  3. NORshould_not

因此,如果您想查看 CUSTNR = 24508 和 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

最新更新