gpt4 book ai didi

elasticsearch - 在 script_field 值上使用 elasticsearch 聚合?

转载 作者:行者123 更新时间:2023-11-29 02:48:16 25 4
gpt4 key购买 nike

我已经创建了常规脚本来计算新的字段值。然后,我可以在我的查询中使用该脚本,使用 script_fields 参数计算新的字段值。这是一个例子:

{
"query": {
"filtered": {
"query": {
"bool": {
"must": {"match_all": {}}
}
}
}
},
"script_fields":{
"my_field":{
"script_id":"my_field_calculator",
"lang" : "groovy",
"params": {}
}
}
}

这工作得很好,我看到每个结果都有一个包含 my_fieldfields 对象。完美的。

现在我想使用 terms aggregation要获取此新字段值每次出现的次数,如下所示:

{
"query": {
"filtered": {
"query": {
"bool": {
"must": {"match_all": {}}
}
}
}
},
"script_fields":{
"my_field":{
"script_id":"my_field_calculator",
"lang" : "groovy",
"params": {}
}
}
"aggs": {
"counts_by_my_field": {
"terms": {
"field": "my_field"
}
}
}
}

查询运行得很好,我仍然在每个字段中看到我的计算结果,但是 aggregations 对象包含一个键,counts_by_my_field,带有一个空的 buckets 里面的数组。

我错过了什么?是否可以在聚合中使用 script_fields?

最佳答案

那是不可能的,现在还不行。 script_fields 在聚合或分面中作为 field 放置时不起作用。

并且没有任何方法可以通过聚合访问脚本字段。见解释。

我深入研究了 Elasticsearch 实现代码,

这是 ValuesSourceAggregationBuilder#script() 的 Javadoc用于脚本的术语聚合。

Sets the script which generates the values. If the script is configured along with the field (as in {@link #field(String)}), then * this script will be treated as a {@code value script}. A value script will be applied on the values that are extracted from * the field data (you can refer to that value in the script using the {@code _value} reserved variable). If only the script is configured * (and the no field is configured next to it), then the script will be responsible to generate the values that will be aggregated. *

这意味着,您不能将“script_id”发送到聚合。你只能这样做,

POST index/type/_search
{
"aggs": {
"name": {
"terms": {
"script": "_source.data[0]",
"lang": "groovy",
"params": {}
}
}
}
}

希望对您有所帮助!!谢谢

关于elasticsearch - 在 script_field 值上使用 elasticsearch 聚合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25258024/

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