elasticsearch facet scriptを使用しようとしていますが、reduce フェーズの NativeScriptFactory に到達すると、渡されたマップ パラメーターが空です。これが私のクエリです:
"facets": {
"myFacet": {
"script": {
"lang": "native",
"map_script": "MyMap",
"reduce_script": "MyReduce",
"params" : {
"facet" : {}
}
}
}
}
デフォルトのレデューサーを使用すると、次の応答が返されます。
"facets": {
"myFacet": {
"_type": "script",
"facet": [
{
"222790": 7,
"762984": 7
}
]
}
}
私のマップスクリプトは次のようになります。
public class MyMapScript extends AbstractSearchScript {
private Map<String, Double> _myScores;
public MyMapScript(Map<String, Object> stringObjectMap) {
_myScores = (Map<String, Double>) stringObjectMap.get("facet");
}
@Override
public Object run() {
ScriptDocValues.NumericLong tags = (ScriptDocValues.NumericLong) doc().get("tags");
for (Long t : tags.getValues()){
Double score = 7.0;
_myScores.put(t.toString(), score);
}
return _myScores;
}
}
パラメーターとして空のマップを取得する reduce スクリプト ファクトリ:
public class MyReduceScriptFactory implements NativeScriptFactory {
@Override
public ExecutableScript newScript(@Nullable Map<String, Object> stringObjectMap) {
return new MyReduceScript(stringObjectMap);
}
}
マッパーの出力をレデューサーに渡すにはどうすればよいですか?