当前位置: 首页 > 面试题库 >

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

东郭子默
2023-03-14
问题内容

我正在尝试根据文档中的值创建动态参数。

我到目前为止在这里尝试过

 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'

我想使参数动态化,以便doc值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",
                         ^                     ^
                         |                     |


 类似资料:
  • 问题内容: 我正在尝试创建一个脚本字段,该脚本字段将计算两个时间戳之间的时间差,然后在该脚本字段上聚合一个。 我首先尝试: 在合计平均值下产生价值。 然后我尝试了: 生成了一条错误消息,内容为:“在映射中找不到[timedifference]的字段” 问题答案: 简单地将脚本移到聚合上怎么样?

  • 问题内容: 我正在尝试对聚合执行以下查询: 并引发以下异常: 任何想法我该如何解决。参考: http://www.elasticsearch.org/guide/zh- CN/elasticsearch/reference/current/search-aggregations-metrics-sum- aggregation.html 问题答案: 默认情况下,elasticsearch中禁用动态

  • 我正在尝试以下关于聚合的查询: 它引发以下异常: 你知道我该怎么解决这个问题吗。参考: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-sum-aggregation.html

  • 问题内容: 我在尝试了解如何在Django中创建动态选择字段时遇到了一些麻烦。我有一个模型设置类似: 我想做的是创建一个选择字段whos的值是与该骑手相关联的航点(将是登录的人)。 目前,我以如下形式覆盖init: 但是所有要做的就是列出所有路标,它们与任何特定的骑手都没有关联。有任何想法吗?谢谢。 问题答案: 你可以通过将用户传递给表单init来过滤航点 启动表单时从你的角度来看 在模型形式的情

  • 我试图创建一个简单的脚本,通过自定义参数数组过滤嵌套字段数组,通过我的for循环抛出错误。 映射 源(_S) 脚本如下所示: 如果我用一个简单的字符串替换“params['自定义字段'][I]”部分,它工作得很好,所以我猜我的问题就在那里,但不知道到底是什么。 另一个注意事项,知道如何构造我的查询,以便在“_source”中返回来自无痛脚本的结果吗? 最后,我想做这样的事情: 但首先我想让它使用上

  • 问题内容: 我想在每个更新时间将一个对象添加到字段中。 例如,我有一个文档: 下次,我想在测试字段中添加一个对象并保存旧对象。结果是: 如何实现? 编辑 我使用脚本: 但是,我得到了例外: 编辑 现在,我想添加一个字段以确保更新或插入对象。例如: 当我更新字段时,当id存在时,我将更新对象。相反,我将插入对象。 问题答案: 我建议尝试这样的脚本,该脚本在参数中带有两个参数。它将检查任何嵌套对象是否