ElasticSearch 5.5 SearchScript

时间:2017-08-09 19:45:08

标签: elasticsearch elasticsearch-plugin elasticsearch-java-api

我正在实现自定义本机SearchScript,在查询执行时会产生一定的分数。给定术语x,脚本应根据索引中的文档集计算相似性度量。应使用ScriptEngineService实例编译和执行搜索脚本。然而,问题在于给定了使用映射端点明确定义的字段,在该段内找不到该字段。

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

为什么没有找到包含给定字段的文档的任何提示?

1 个答案:

答案 0 :(得分:0)

您尝试做的事情是不可能的:发布是按期限的,而在这里您试图为整个字段提供过帐。你应该context.reader().postings(new Term(field, term), PostingsEnum.PAYLOAD)