将参数传递给 ElasticSearch facet 脚本的本机 reduce 脚本



我正在尝试使用elasticsearch facet脚本,但是当我进入reduce阶段的NativeScriptFactory时,传递的map参数为空。这是我的查询:

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

我该怎么做才能将映射器的输出到化简器?

显然这是在最新版本中修复的,我使用的是较旧的版本。

相关内容

  • 没有找到相关文章

最新更新