如何编写复杂的 ElasticSearch 查询

发布于 2025-01-19 17:24:05 字数 3052 浏览 0 评论 0原文

我想使用范围查询从Elasticsearch返回数据。 我的状况就是这样。

((Range(Price and Discount) OR Range(Price) AND Filter(Must1) AND Filter(Must2)) 

我面临的问题是,某些文件既包含价格和折扣,又包含价格。我需要查询以根据指定范围获取数据。因此,它返回折扣字段,但不能返回我想要的指定范围。

现在我正在使用此查询。

    "query": {
    "bool": {
        "must": [
            {
                "bool": {
                    "should": [
                        {
                            "bool": {
                                "must": [
                                    {
                                        "range": {
                                            "discount": {
                                                "gte": 10,
                                                "lte": 12
                                            }
                                        }
                                    },
                                    {
                                        "range": {
                                            "price": {
                                                "gte": 10,
                                                "lte": 12
                                            }
                                        }
                                    }
                                ]
                            }
                        },
                        {
                            "bool": {
                                "should": [
                                    {
                                        "range": {
                                            "discount": {
                                                "gte": 10,
                                                "lte": 12
                                            }
                                        }
                                    },
                                    {
                                        "range": {
                                            "price": {
                                                "gte": 10,
                                                "lte": 12
                                            }
                                        }
                                    }
                                ]
                            }
                        }
                    ]
                }
            },
            {
                "terms": {
                    "Category": [
                        "123"
                    ]
                }
            },
            {
                "nested": {
                    "path": "the_path",
                    "query": {
                        "bool": {
                            "must": {
                                "match": {
                                }
                            },
                            "filter": [    
                            ]
                        }
                    }
                }
            }
        ]
    }
}

请帮助我,从过去的几天开始,我一直坚持下去。

I want to return the data from ElasticSearch using the range query.
My Condition is something like this.

((Range(Price and Discount) OR Range(Price) AND Filter(Must1) AND Filter(Must2)) 

The issue I am facing is that some document contains both price and discount but some only contains Price. I need a query to get data according to the specified range. So, it returns the discount field but not the specified range which I want.

right now I am using this query.

    "query": {
    "bool": {
        "must": [
            {
                "bool": {
                    "should": [
                        {
                            "bool": {
                                "must": [
                                    {
                                        "range": {
                                            "discount": {
                                                "gte": 10,
                                                "lte": 12
                                            }
                                        }
                                    },
                                    {
                                        "range": {
                                            "price": {
                                                "gte": 10,
                                                "lte": 12
                                            }
                                        }
                                    }
                                ]
                            }
                        },
                        {
                            "bool": {
                                "should": [
                                    {
                                        "range": {
                                            "discount": {
                                                "gte": 10,
                                                "lte": 12
                                            }
                                        }
                                    },
                                    {
                                        "range": {
                                            "price": {
                                                "gte": 10,
                                                "lte": 12
                                            }
                                        }
                                    }
                                ]
                            }
                        }
                    ]
                }
            },
            {
                "terms": {
                    "Category": [
                        "123"
                    ]
                }
            },
            {
                "nested": {
                    "path": "the_path",
                    "query": {
                        "bool": {
                            "must": {
                                "match": {
                                }
                            },
                            "filter": [    
                            ]
                        }
                    }
                }
            }
        ]
    }
}

Please help me with this I am stuck with it from past few days.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

驱逐舰岛风号 2025-01-26 17:24:05

根据您给出的条件,将创建以下 DSL 查询

{
    "query": {
        "bool": {
            "must": [
                {
                    "bool": {
                        "should": [
                            {
                                "bool": {
                                    "must": [
                                        {
                                            "range": {
                                                "price": {
                                                    "gte": 10,
                                                    "lte": 20
                                                }
                                            }
                                        },
                                        {
                                            "range": {
                                                "deiscount": {
                                                    "gte": 10,
                                                    "lte": 20
                                                }
                                            }
                                        }
                                    ]
                                }
                            },
                            {
                                "range": {
                                    "price": {
                                        "gte": 10,
                                        "lte": 20
                                    }
                                }
                            }
                        ]
                    }
                },
                {
                    "bool": {
                        "filter": {
                            "term": {
                                "user.id": "kimchy"
                            }
                        }
                    }
                },
                {
                    "bool": {
                        "filter": {
                            "term": {
                                "user.id": "kimchy"
                            }
                        }
                    }
                }
            ]
        }
    }
}

Based on the condition you have given, following DSL Query will be created

{
    "query": {
        "bool": {
            "must": [
                {
                    "bool": {
                        "should": [
                            {
                                "bool": {
                                    "must": [
                                        {
                                            "range": {
                                                "price": {
                                                    "gte": 10,
                                                    "lte": 20
                                                }
                                            }
                                        },
                                        {
                                            "range": {
                                                "deiscount": {
                                                    "gte": 10,
                                                    "lte": 20
                                                }
                                            }
                                        }
                                    ]
                                }
                            },
                            {
                                "range": {
                                    "price": {
                                        "gte": 10,
                                        "lte": 20
                                    }
                                }
                            }
                        ]
                    }
                },
                {
                    "bool": {
                        "filter": {
                            "term": {
                                "user.id": "kimchy"
                            }
                        }
                    }
                },
                {
                    "bool": {
                        "filter": {
                            "term": {
                                "user.id": "kimchy"
                            }
                        }
                    }
                }
            ]
        }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文