gpt4 book ai didi

elasticsearch - 如何在Elasticsearch中减去两个值

转载 作者:行者123 更新时间:2023-12-03 01:26:57 24 4
gpt4 key购买 nike

我正试图弄清两个 Realm 之间的差异。我正在使用Elasticsearch 5.5。

我已经尝试过

{
"query": {
"bool": {
"filter": {
"script": {
"script": "doc['students.total_fee'].value - doc['students.paid_fee'].value"
}
}
}
}
}

但它返回的是空的“点击数”。

我也尝试过
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "students",
"query": {
"script": {
"script": {
"inline": "doc['students.total_fee'].value - doc['students.paid_fee'].value",
"lang": "expression"
}
}
}
}
}
]
}
}

它返回“0”。

也“script_fields”不起作用。
{ "script_fields" :
{ "difference" :
{ "script" : "doc['students.total_fee'].value - doc['students.paid_fee'].value"
} } }

假设我有以下格式的数据。
"_source" : {
"students" : [
{
"name" : "A",
"total_fee" : 12345,
"paid_fee" : 12344.8
},
{
"name" : "B",
"total_fee" : 23456,
"paid_fee" : 23455.6
}
]
}

现在,我想获取每个学生的“total_fee”和“paid_fee”之间的区别。

我希望所有学生都能得到一系列的不同。

先谢谢了

最佳答案

您需要使用以下查询,而我的es版本是6.2.2。它给出了完美的结果。但是请记住,脚本通常占用大量CPU。

如果您的字段正常,则下面的查询工作正常。

{
"size": 10,
"script_fields": {
"fare_diff": {
"script": "doc[\"students.total_fee\"].value - doc[\"students.paid_fee\"].value"
}
}
}

如果您使用的是嵌套字段参数,则查询将如下所示。
{
"script_fields": {
"fare_diff": {
"script": {
"lang": "painless",
"source": "int total = 0; def l = new ArrayList(); for (int i = 0; i < params['_source']['students'].size(); ++i) { l.add(params['_source']['students'][i]['total_fee'] - params['_source']['students'][i]['paid_fee']);} return l.toArray();"
}
}
}
}

原因:由于嵌套文档被索引为单独的文档,因此只能在嵌套查询,嵌套/ reverse_nested聚合或嵌套内部匹配的范围内访问它们。

关于elasticsearch - 如何在Elasticsearch中减去两个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57869176/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com