【发布时间】:2020-04-06 22:02:05
【问题描述】:
我有一个包含折扣价格的文档结构。仅当满足折扣的所有条件时才会应用折扣。
我努力找出一个可以解决下面提到的用例的查询,但我想我最终将不得不使用脚本功能。有没有一种方法可以在不编写脚本的情况下为以下用例构建查询?
{
"name": "Brown Teddy With Hat",
"prices": {
"basePrice": {
"price": 3000, // actual price
"discounts": [
{ "price": -10, "conditions": ["value1"] },
{ "price": -20, "conditions": ["value5", "value7"] }, // two conditions
{ "price": -30, "conditions": ["value6"] },
{ "price": -40, "conditions": [] } // no conditions
]
},
"installmentPrice": {...} // ignore for now
}
}
我想汇总满足条件的所有折扣。将有一个输入数组,其中包含一些条件值,例如 [value5, value6, value1]。折扣条件应该是输入数组的子集。
在上面的示例中:将应用折扣 -10、-30 和 -40。我想从实际价格(3000)中减去折扣,然后按折扣价排序。
我尝试了terms_set 查询,但它适用于简单的情况,例如具有数组字段的文档并将输入与该数组进行匹配,但在我的情况下,折扣是多个嵌套的,terms_set 无法正常工作。
Elasticsearch 版本 - 6.6.1
没有帮助的参考:
https://discuss.elastic.co/t/subsets/46488
https://discuss.elastic.co/t/match-all-terms-in-document-array/24793
【问题讨论】:
标签: elasticsearch elasticsearch-aggregation elasticsearch-6