【发布时间】:2019-10-02 12:12:26
【问题描述】:
我有一些带有促销代码的数组(来自请求):
$promocodes = ['K1H5E1F1', 'M4C8A5K6', 'A3B9A45KL'];
我在 Elasticsearch 中有产品数据(例如,我将给出一个产品的数据):
// First product (2 promocodes matched, take a lower price 265.5 and filter this product at this price)
"price": 199,
"promocodes" : [
{
"code" : "K1H5E1F1",
"price" : 265.5
},
{
"code" : "LKDS3534K",
"price" : 357
},
{
"code" : "A3B9A45KL",
"price" : 327.5
}
]
// Second product (1 promocode matched, take a price 700 and filter this product at this price)
"price": 800,
"promocodes" : [
{
"code" : "AJ543HJB",
"price" : 500
},
{
"code" : "M4C8A5K6",
"price" : 700
}
]
// Third product (0 promocode matched, take a base price 900 and filter this product at this price)
"price": 900,
"promocodes" : [
{
"code" : "AJ87HJ90",
"price" : 750
}
]
我需要根据促销代码按价格过滤产品数据。如果您设置了价格范围并有促销代码,那么您需要过滤产品。如果产品有相同的促销代码,那么您需要取此促销代码的价格,而不是主价格。如果一个产品有 2 个促销代码匹配,那么您需要采取较低的价格。在我的示例中,同一产品有一个产品的 2 个促销代码,我需要从促销代码的 2 个价格中取出较低的价格并过滤该特定价格。
此请求不会按我的需要过滤价格:
GET dev_products/_search
{
"query": {
"bool": {
"must": [
{
"range": {
"price": {
"gte": 100,
"lte": 350
}
}
},
{
"nested": {
"path": "promocodes",
"query": {
"terms": {
"promocodes.code": [
'K1H5E1F1',
'M4C8A5K6',
'A3B9A45KL'
]
}
}
}
}
]
}
}
}
我不知道如何正确提出请求,我请你帮忙。
【问题讨论】:
-
也许有人至少有一些想法可以通过这些想法来完成?我会很高兴得到任何帮助,因为我真的需要这样做。
标签: elasticsearch