私は言葉の面をマイグレーションする必要があります
{
"facets" : {
"facet_name" : {
"terms" : {
"field" : "location",
"script" : "return doc["location"].value == "UA""
}
}
}
}
用語集合へ
{
"aggs" : {
"agg_name" : {
"terms" : {
"field" : "location",
"script" : "return doc["location"].value == "UA""
}
}
}
}
ファセットは弾力性に優れています(1.1.2と1.5.2でテストしました)
しかし、集合体は例外をスローします org.elasticsearch.script.groovy.GroovyScriptExecutionException:ArrayIndexOutOfBoundsException [-1]
問題の説明によると https://github.com/elastic/elasticsearch/issues/11728 明示的な "フィールド"が見つかった場合、集計によって "値"スクリプトが使用されるため、このような動作が発生します。
ファセットスクリプトは伝統的です。
このスクリプトの "価値"の性質を無効にし、それがファセットのように機能するようにするには?
前もって感謝します!
PS:フィルタリング(インクルード/除外)は使用できません。除外ルールは、ファセットと同様にスクリプトで宣言する必要があります。
回答:
回答№1は0私はスクリプトを修正し、 "field"をaggから削除することで回避策を見つけました:
{
"aggs" : {
"agg_name" : {
"terms" : {
"script" : "if (_source.location == "UA") {return _source.location} else {return null}"
}
}
}
}