function_score
のscript_score
を使用してスクリプトを作成しようとしています。 私は、rankings
フィールドがtype="nested"
であるいくつかの文書を持っています。 フィールドのマッピングは次のとおりです。ElasticSearch Painlessスクリプト:ネストされたオブジェクトの配列を反復する方法
"rankings": {
"type": "nested",
"properties": {
"rank1": {
"type": "long"
},
"rank2": {
"type": "float"
},
"subject": {
"type": "text"
}
}
}
サンプル文書には、次のとおりです。私が達成したい何
"rankings": [
{
"rank1": 1051,
"rank2": 78.5,
"subject": "s1"
},
{
"rank1": 45,
"rank2": 34.7,
"subject": "s2"
}]
は、ランキングのネストされたオブジェクトを反復することです。実際には、特定のsubject
を見つけて、rank1, rank2
を使用して何かを計算するために、forループを使用する必要があります。
for
ループ:
の代わりを使用して:私はまた、次のオプションを試してみました"function_score": { "script_score": { "script": { "lang": "painless", "inline": "sum = 0;" "for (item in doc['rankings_cug']) {" "sum = sum + doc['rankings_cug.rank1'].value;" "}" } } }
: これまでのところ、私はこのようなものを使用するが、(コンパイルエラーを投げて)動作していないよう
in
:for (item:doc['rankings'])
成功しません。for
ループin
を用いるが、オブジェクトの特定の要素を反復処理しようとしている、すなわち、rank1
:for (item in doc['rankings.rank1'].values)
、実際にコンパイルが、rank1
の長さゼロの配列を見出すと思われます。
私は、_source
という要素はJSONのようなオブジェクトを返すことができるということを読んだことがありますが、わかっている限り、検索クエリではサポートされていません。
どうすればいいのですか?
ありがとうございます。
答えをありがとう。はい、私は実際に自分のデータを表現する方法を変えました。私は私の内部オブジェクトのキーとしてそれぞれ「件名」を使用してキーを使用して各オブジェクトにアクセスしました。 – christinabo