java - 自定义插件无法通过 QuerySpec 构造函数推断

标签 java elasticsearch elasticsearch-5

我尝试将我的自定义插件从ES5.5升级到ES6.3。 在 ES5.5 中我自己的插件运行良好。但在 ES6.3 中,QuerySpec 构造函数无法推断它。 以下是 ES6.3 中的代码片段:

  1. AbstractVectorQuery
public abstract class AbstractVectorQuery extends Query
{
    protected String field;
    protected float[] qVector;
    protected VectorFieldType vectorFieldType;
    protected DistanceMeasure distHelper;

    protected AbstractVectorQuery(String field, float[] qVector, DistanceMeasure distHelper, VectorFieldType fieldType)
    {
        this.field = field;
        this.qVector = qVector;
        this.distHelper = distHelper;
        this.vectorFieldType = fieldType;
    }
}
  • VectorIterQuery
  • public class VectorIterQuery extends AbstractVectorQuery
    {
        public VectorIterQuery(String field, float[] vector, DistanceMeasure distHelper, VectorFieldType vectorFieldType)
        {
            super(field, vector, distHelper, vectorFieldType);
        }
    }
    
  • DistanceVectorQueryBuilder
  • public abstract class DistanceVectorQueryBuilder<T extends DistanceVectorQueryBuilder<T>>
        extends AbstractVectorQueryBuilder<T>
    {
        public static final DistanceType DEFAULT_DISTANCE_TYPE = DistanceType.L2;
        protected DistanceType distanceType = DEFAULT_DISTANCE_TYPE;
    
        protected abstract void innerInnerDoXContent(XContentBuilder builder, Params params) throws IOException;
    
        protected DistanceVectorQueryBuilder(){}
    
        protected DistanceVectorQueryBuilder(StreamInput in) throws IOException
        {
            super(in);
            this.distanceType = in.readEnum(DistanceType.class);
        }
    }
    
  • IterVectorQueryBuilder
  • public class IterVectorQueryBuilder extends DistanceVectorQueryBuilder<IterVectorQueryBuilder>
    {
        public static final String QUERY_NAME = "iter";
    
        public IterVectorQueryBuilder(StreamInput input) throws IOException
        {
            super(input);
        }
    }
    
  • vector 插件
    这里,IDE 报告:
    无法推断参数(无法解析构造函数)
  • public class VectorPlugin extends Plugin implements MapperPlugin, SearchPlugin
    {
        @Override
        public List<QuerySpec<?>> getQueries()
        {
            List<QuerySpec<?>> list = new ArrayList<>();
    
            QuerySpec<IterVectorQueryBuilder> iterQuery = new QuerySpec<>(
                    IterVectorQueryBuilder.QUERY_NAME,
                    IterVectorQueryBuilder::new,
                    IterVectorQueryBuilder::fromXContent
            );
            list.add(iterQuery);
        }
    }
    

    如有任何建议,我们将不胜感激。

    最佳答案

    已解决,实际上我发布的代码片段中并不存在该问题,抱歉造成误解。

    更改 IterVectorQueryBuilder::fromXContent 的返回类型 来自

    Optional<IterVectorQueryBuilder> fromXContent(QueryParseContext parseContext) throws IOException { ... }
    

    IterVectorQueryBuilder fromXContent(QueryParseContext parseContext) throws IOException { ... }  
    

    可以解决这个问题。

    关于java - 自定义插件无法通过 QuerySpec 构造函数推断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61812464/

    相关文章:

    Java For循环练习

    elasticsearch - Elasticsearch 7.7 版本中跨多个索引的查询

    Java swing 时间表管理器

    Java:设置从运行线程为字符串赋值?

    search - 在 Elasticsearch 中查询时如何发送提升值?

    search - Elastic Search中的自动完成匹配

    elasticsearch - ElasticSearch 5:插入数据时发生MapperParserException

    php - 大elasticsearch query_string查询

    java - Java 控制台应用程序中的 Unicode 输入

    java - 用于 N 个查询的 MultiSearch API