2013-09-23 30 views
0

我試圖使用elasticsearch facet script,但是當我到達reduce階段的NativeScriptFactory時,傳遞的映射參數是空的。 這裏是我的查詢:將參數傳遞給ElasticSearch構面腳本的本地reduce腳本

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

和減少腳本廠,它以空白地圖作爲參數:

public class MyReduceScriptFactory implements NativeScriptFactory { 
    @Override 
    public ExecutableScript newScript(@Nullable Map<String, Object> stringObjectMap) { 
     return new MyReduceScript(stringObjectMap); 
    } 
} 

我需要做些什麼才能將映射器的輸出映射到reducer?

回答