我一直很难在ES中形成搜索请求。
现在,我必须将代码从v.2更新到v.6,但有很多不同。
当前问题:如何制定复杂的or
和and
搜索?
现在我有:
{
"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]"
我应该怎么写?
答案 0 :(得分:0)
elasticsearch 6或更高版本中没有所谓的AND / OR,它是通过这种方式映射的
因此,如果您想查看所有具有 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