如何使用python在一个elasticsearch查询中包含范围和匹配查询?

我必须找到具有字符串的匹配文档,例如:在某些“键”范围内的字符串:“

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的未知键。’)

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

回答:

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

res = es.search(index="dummy", body={

"from": 0,

"size": 0,

"query": {

"bool": {

"must": [

{

"range": {

"key": {

"gte": "1000"

}

}

},

{

"match": {

"word": "sky"

}

}

]

}

}

})

以上是 如何使用python在一个elasticsearch查询中包含范围和匹配查询? 的全部内容, 来源链接: utcz.com/qa/430688.html

回到顶部