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

问题描述 投票:0回答:1

我尝试将自定义插件从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;
    }
}
  1. VectorIterQuery
public class VectorIterQuery extends AbstractVectorQuery
{
    public VectorIterQuery(String field, float[] vector, DistanceMeasure distHelper, VectorFieldType vectorFieldType)
    {
        super(field, vector, distHelper, vectorFieldType);
    }
}
  1. 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);
    }
}
  1. IterVectorQueryBuilder
public class IterVectorQueryBuilder extends DistanceVectorQueryBuilder<IterVectorQueryBuilder>
{
    public static final String QUERY_NAME = "iter";

    public IterVectorQueryBuilder(StreamInput input) throws IOException
    {
        super(input);
    }
}
  1. VectorPlugin在这里,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);
    }
}

任何建议都将不胜感激。

java elasticsearch elasticsearch-5
1个回答
0
投票

已解决,实际上我发布的代码段中不存在此问题,对您的误解感到抱歉。更改IterVectorQueryBuilder :: fromXContent的返回类型从Optional到IterVectorQueryBuilder可以解决此问题。

© www.soinside.com 2019 - 2024. All rights reserved.