0

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);
    }
}

マッパーの出力をレデューサーに渡すにはどうすればよいですか?

4

1 に答える 1