有个人长的像洋葱,走着走着就哭了…….

请教一个问题,ES must_not 多条件查询时不符合预期

Elasticsearch | 作者 SHI_YUAN | 发布于2023年08月10日 | 阅读数:1612

查询需求:要 商品id='123' 且 属性不包含A 且 属性不包含B的商品数据
 
错误的方式1:
{
"from":0,
"size":100,
"query": {
"bool": {
"must": [
{
"term": {
"productId": {
"value": "8a80908389d39bc70189d8cc4d7901f8"
}
}
},
{
"bool": {
"must": [
{
"bool": {
"must_not": [
{
"match": {
"proAttrValueIds": "8a80908389dd65c70189ddfcbaae0005"
}
}
]
}
},
{
"bool": {
"must_not": [
{
"match": {
"proAttrValueIds": "8a8090838952ed2b01895377cce900a8"
}
}
]
}
}
]
}
}
]
}
}
}

 正确的方式2:
{
"from":0,
"size":100,
"query": {
"bool": {
"must": [
{
"term": {
"productId": {
"value": "8a80908389d39bc70189d8cc4d7901f8"
}
}
},
{
"bool": {
"must_not": [
{
"bool": {
"must": [
{
"match": {
"proAttrValueIds": "8a80908389dd65c70189ddfcbaae0005"
}
},
{
"match": {
"proAttrValueIds": "8a8090838952ed2b01895377cce900a8"
}
}
]
}
}
]
}
}
]
}
}
}

方式2查询出来是符合预期的,但是不太明白 方式1的错误原因是什么
已邀请:

Charele - Cisco4321

赞同来自:

我感觉你说反了吧。
 
上面的好像是对的
商品id='123'   ---> 条件1
不包含A且不包含B ---> 条件2
 
上面的刚好是条件1+条件2
 
下面的是
包含A且包含B ---> 条件3
 
条件1 + 取反(条件3)
就是条件1 + 不是“包含A且包含B”
 
 

要回复问题请先登录注册