elasticsearch - 如何将参数放入query.script.script.params?
问题描述
我有一个这样的查询:
{
"script": {
"script": {
"lang": "painless",
"params": {
"maxPrice": 1000000,
"minPrice": 50,
"now": "{{now}}"
},
"source": "(doc['selling_price'].value == 0 && doc['normal_price'].value >= params.minPrice && doc['normal_price'].value <= params.maxPrice) || (doc['selling_price'].value > 0 && doc['selling_price'].value >= params.minPrice && doc['selling_price'].value <= params.maxPrice && params.now <= doc['selling_price_end_time'].value.getMillis() && params.now >= doc['selling_price_start_time'].value.getMillis())"
}
}
}
当我尝试像这样在模板中放入参数minPrice
时:maxPrice
now
"params": {
"maxPrice": "{{maxPrice}}",
"minPrice": "{{minPrice}}",
"now": "{{now}}"
},
然后当我运行时:
{
"id": "my_template",
"params": {
"query_all": "My goi",
"maxPrice": 100000000,
"minPrice": 50,
"now": 1421427600000,
我收到了这个:
"failures": [
{
"shard": 4,
"index": "dev_index_sku_list",
"node": "jSpDqKHwSMeWsUxxoD9-5w",
"reason": {
"type": "script_exception",
"reason": "runtime error",
"script_stack": [
"(doc['selling_price'].value == 0 && doc['normal_price'].value >= params.minPrice && doc['normal_price'].value <= params.maxPrice) || (doc['selling_price'].value > 0 && doc['selling_price'].value >= params.minPrice && doc['selling_price'].value <= params.maxPrice &&
可笑的是,当我设置now
为参数时,它可以工作,但不适用于minPrice
and的情况maxPrice
:
背后的逻辑source
是:
我们的数据有:
NormalPrice: 200 #this is the normal price
SellingPrice: 100 #this is actually the promotion price
selling_price_start_time: "2020-01-01" #duration of promotion price
selling_price_end_time: "2020-01-30"
逻辑:
if selling_price
!= 0 and now
in the Promotion time then filter within minPrice
and maxPrice
else then filter by normalPrice
within minPrice
andmaxPrice
目前正在开发第 7 版的 elasticSearch
解决方案
推荐阅读
- javascript - 如何将 blob url 从 js 文件导出到 nuxt.js 中的 vue 文件?
- javascript - 解决 Yarn 对不同包的依赖
- java - 如何打印堆插入的结果(java)
- c# - 添加这条线(FPS)后,为什么我不能在 Unity3D 中水平查看?
- reactjs - 如何将 React(使用 Solidity 智能合约)部署到 S3 而不会出错
- python - 如何在 ursina python 中增加 FPS
- android - 使用 FileOutputStream Android 编辑/修改 Uri 引用的文件
- java - 如何在 Java 中验证二维数组值
- laravel - Laravel 5.4 + WP 仅在某些路线上出现致命错误
- algorithm - 将一个数分成三部分,并使 lcm(a,b,c) 尽可能小