python - 如何使用 python 在一个 Elasticsearch 查询中进行范围和匹配查询?

标签 python elasticsearch pyelasticsearch

我必须在某个“键”范围内找到具有字符串的匹配文档,例如:“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"}
                })

组合查询执行时抛出错误:

raise HTTP_EXCEPTIONS.get(status_code, TransportError)(status_code, error_message, additional_info) elasticsearch.exceptions.RequestError: TransportError(400, u'parsing_exception', u'Unknown key for a START_OBJECT in [match].')

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

最佳答案

您需要使用 bool/must 查询来执行此操作

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

关于python - 如何使用 python 在一个 Elasticsearch 查询中进行范围和匹配查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49556729/

相关文章:

elasticsearch - 如何在Elasticsearch中对多值字段进行桶聚合

python - 如何检索 panda 分组数据框中的聚合值

python - Django runserver 使用什么类型的服务器?

elasticsearch - 为什么此索引状态为红色:opendistro-ism-config

elasticsearch - 如何在Elasticsearch中获取满足特定查询的所有不同字段值?

python - 如果注册的查询包含术语,则由ElasticSearch的Percolate API匹配的文档始终不返回任何匹配项

python - 为特定范围内的值建立索引

python - 如何在包含相同元素的另一个列表中找到一个列表的元素索引?

elasticsearch - 在应用程序中设置证书颁发机构证书有什么作用?

node.js - elasticsearch:错误:无法解析/序列化正文