我一直在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]"
我应该怎么写?
在 elasticsearch 6 或更高版本中没有所谓的 AND/OR 的东西,它是这样映射的
- 并且 是必须的
- 或 应该是应该
- NOR是should_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