elasticsearch Elasticsearch脚本字段。动态参数选择,elasticsearch,elasticsearch" /> elasticsearch Elasticsearch脚本字段。动态参数选择,elasticsearch,elasticsearch" />

elasticsearch Elasticsearch脚本字段。动态参数选择

elasticsearch Elasticsearch脚本字段。动态参数选择,elasticsearch,elasticsearch,我试图根据文档中的值创建一个动态参数 我在这里试了这么久 body: { "script_fields": { "potentialIncome": { "script": { "lang": "painless", "source": "doc.rentPrice.value - params['doc

我试图根据文档中的值创建一个动态参数

我在这里试了这么久

 body: {
            "script_fields": {
                "potentialIncome": {
                    "script": {
                        "lang": "painless",
                        "source": "doc.rentPrice.value - params['doc.buyingPrice.value']",
                        "params": {
                            120000: 1200,
                            150000: 1500
                        }
                    }
                }

            }
        }
这会引发以下错误:

type: 'script_exception',
    reason: 'runtime error',
    script_stack: 
     [ 'doc.rentPrice.value - params[\'doc.buyingPrice.value\']',
       '                            ^---- HERE' ],
    script: 'doc.rentPrice.value - params[\'doc.buyingPrice.value\']',
    lang: 'painless' 
我希望参数是动态的,以便单据值
buyingPrice
决定扣除哪个值

使用ElasticSearch 7.2


一个复杂而糟糕的方法是使用下面的脚本

if(doc['buyingPrice'].value==120000){return doc['rentPrice'].value-params['120000']}

else if(doc['buyingPrice'].value==150000){return doc['rentPrice'].value-params['150000']}


Es对象:

{
    "took": 2,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 2,
            "relation": "eq"
        },
        "max_score": 1.0,
        "hits": [{
            "_index": "immo",
            "_type": "objects",
            "_id": "1",
            "_score": 1.0,
            "_source": {
                "buyingPrice": 120000,
                "rentPrice": 500
            }
        }, {
            "_index": "immo",
            "_type": "objects",
            "_id": "2",
            "_score": 1.0,
            "_source": {
                "buyingPrice": 150000,
                "rentPrice": 500
            }
        }]
    }
}

您需要尝试不使用单引号

"source": "return (params[String.valueOf(doc.buyingPrice.value)] != null) ? doc.rentPrice.value - params[String.valueOf(doc.buyingPrice.value)] :  0",
                         ^                     ^
                         |                     |

从某种意义上说,这是可行的,不再中断,但潜在收入现在总是0。我编辑并添加了对象There you go我修复了查询。太棒了,很高兴它有帮助!嘿-你能帮我个忙吗?;)我有同样的问题-现在它是一个文本字段。文本字段是
doc.region.value
,我有参数,其中键是字符串。我该怎么做?请随便问一个新问题。