0

クエリ実行時に特定のスコアを生成するカスタムネイティブSearchScriptを実装中です。 xという用語が与えられた場合、スクリプトはインデックス内のドキュメントセットに対して類似性メトリックを計算する必要があります。検索スクリプトは、ScriptEngineServiceインスタンスを使用してコンパイルして実行する必要があります。ただし、マッピングエンドポイントを使用して明示的に定義されたフィールドがある場合、そのフィールドはセグメント内に見つかりません。ElasticSearch 5.5 SearchScript

@Override 
public Function<Map<String,Object>,SearchScript> compile(String scriptName, String scriptSource, Map<String, String> params) { 
    if ("script".equals(scriptSource)) { 
    return p -> new SearchScript() { 
     final String field; 
     final String term; 

     { 
     field = p.get("field").toString(); 
     term = p.get("term").toString(); 
     } 

     @Override 
     public LeafSearchScript getLeafSearchScript(LeafReaderContext context) throws IOException { 
     PostingsEnum postings = context.reader().postings(new Term(field), PostingsEnum.PAYLOAD); 
      if (postings == null) { 
      // The field has not been found within the segment. 
      return() -> 0; 
      } 

特定のフィールドを含むドキュメントが見つかりません。

答えて

0

あなたがしようとしていることはできません。投稿全体はフィールド全体の投稿をしようとしていますが、ここでは期間があります。 context.reader().postings(new Term(field, term), PostingsEnum.PAYLOAD)を実行する必要があります。