gpt4 book ai didi

filter - 在ElasticSearch中堆叠过滤器

转载 作者:行者123 更新时间:2023-12-03 02:03:08 25 4
gpt4 key购买 nike

我正在寻找一个用于电子商务产品过滤的过滤器。每个对ES的请求将至少具有用于类别匹配的必须过滤器,然后具有用于属性的可选过滤器。假设颜色和尺寸。但是,颜色和大小都必须与所选值之一匹配。如果选择的颜色是蓝色和红色,则它们是OR,但是如果选择了大小M和L,则结果应返回乘积(蓝色或红色)和AND大小(M OR L)。我的过滤器是这样的:

"query":{
"filtered":{
"filter":{
"bool":{
"must":[
{
"term":{
"categories":4838
}
},
{
"bool":{
"should":[
{
"bool":{
"must":[
{
"bool":{
"should":[
{
"term":{
"Colour":"White"
}
},
{
"term":{
"Colour":"Black"
}
},
{
"term":{
"Colour":"Blue"
}
}
]
}
}
]
}
},
{
"bool":{
"must":[
{
"bool":{
"should":[
{
"term":{
"Size":"M"
}
},
{
"term":{
"Size":"L"
}
}
]
}
}
]
}
}
]
}
}
]
}
}
}
}

该过滤器返回所有这些的应有物。我得到所有颜色为白色,黑色或蓝色或尺寸为M或L的产品。

总结一下应该如何:

在一个单独的属性是所有OR和它展开搜索,但选择了另一个属性时,它就成为那些属性之间,但仍然在他们的OR。

最佳答案

除了@Mave的答案外,您还可以使用 Terms 过滤器代替Term过滤器来简化搜索请求。它也使请求更具可读性。

{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"term": {
"categories": 4838
}
},
{
"terms": {
"Colour": [
"White",
"Black",
"Pink"
]
}
},
{
"terms": {
"Size": [
"M",
"L"
]
}
}
]
}
}
}
}
}

关于filter - 在ElasticSearch中堆叠过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29983079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com