如何使用python在一个弹性搜索查询中包含范围和匹配查询?

发布于 2021-01-29 15:03:24

我必须找到具有字符串的匹配文档,例如:在某些“键”范围内的字符串:“
sky”。当我编写单独的匹配和范围查询时,我从ES获得输出,但是合并在一起时会抛出异常。

范围查询:

res = es.search(index="dummy",
                body={"from":0, "size":0,"query": {"range":{"key":{"gte":"1000"}}}})

匹配查询:

res = es.search(index="dummy",
                body={"from":0, "size":0,"query": {"match":{"word":"sky"}}})

组合查询:

res = es.search(index="dummy",
                body={
                  "from":0,
                  "size":0,
                  "query": {
                    "range":{
                      "key":{"gte":"1000"}
                    }
                  },
                  "match":{"word":"sky"}
                })

组合查询在执行时会引发错误:

引发HTTP_EXCEPTIONS.get(状态代码,TransportError)(状态代码,error_message,Additional_info)elasticsearch.exceptions.RequestError:TransportError(400,u’parsing_exception’,u’[match]中START_OBJECT的未知键。’)

合并两个查询的正确方法是什么?

关注者
0
被浏览
83
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您需要使用bool/must查询来做到这一点

    res = es.search(index="dummy", body={
      "from": 0,
      "size": 0,
      "query": {
        "bool": {
          "must": [
            {
              "range": {
                "key": {
                  "gte": "1000"
                }
              }
            },
            {
              "match": {
                "word": "sky"
              }
            }
          ]
        }
      }
    })
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看