如何解决具有优先级的Elasticsearch复杂查询
根据可用的折扣和具有指定优先级的价目表,我有很多价格的产品。 “价格”部分映射如下所示:
"price": {
"properties": {
"USD": {
"type": "nested","properties": {
"amount": {
"type": "float"
},"discount_id": {
"type": "keyword"
},"price_list_id": {
"type": "keyword"
},"priority": {
"type": "short"
}
}
}
}
}
根属性是货币(可能有更多的货币,取决于商店)。 价格的真实示例:
"price": {
"USD": [
{
"amount": 10.0,"price_list_id": 1,"discount_id": [
1
],"priority": 1
},{
"amount": 143.8,"discount_id": [
20,22
],"priority": 2
},{
"amount": 193.8,"discount_id": null,"priority": 3
}
]
}
输入是:货币,折扣ID数组,价格列表ID和价格数组。
我需要根据给定的输入匹配所有价格,并按优先级对它们进行排序,然后将最高优先级价格(最低编号)与给定金额进行比较。如果没有产品价格与给定的折扣ID匹配(不必匹配所有ID,一个就足够了),则使用值为空discount_id
的价格。
我将提供一个示例。客户正在按价格过滤产品。最低金额为100美元,最高金额为150美元。假设价格清单是ID 1。
-
此客户可以使用ID 20的折扣。因此,此查询将价格与优先级2匹配。
-
没有折扣。因此,此查询将价格与优先级3匹配,但价格高于给定范围,因此客户看不到任何产品。
另外,当客户可以使用折扣时,但某些产品没有给定折扣ID的折扣价,则应用discount_id
== null的价格。
我想避免编写脚本,但是我自己无法弄清楚。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。