Remove PROTOTYPE from RescorerBuilders
This changes the serialization order for QueryRescorerBuilder's but that is ok because 5.0.0 doesn't need to be wire compatible with anything.
This commit is contained in:
parent
5e8656aff0
commit
584ba6133d
|
@ -286,6 +286,7 @@ public class SearchModule extends AbstractModule {
|
||||||
|
|
||||||
registerBuiltinFunctionScoreParsers();
|
registerBuiltinFunctionScoreParsers();
|
||||||
registerBuiltinQueryParsers();
|
registerBuiltinQueryParsers();
|
||||||
|
registerBuiltinRescorers();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerHighlighter(String key, Class<? extends Highlighter> clazz) {
|
public void registerHighlighter(String key, Class<? extends Highlighter> clazz) {
|
||||||
|
@ -350,7 +351,6 @@ public class SearchModule extends AbstractModule {
|
||||||
configureSuggesters();
|
configureSuggesters();
|
||||||
configureFetchSubPhase();
|
configureFetchSubPhase();
|
||||||
configureShapes();
|
configureShapes();
|
||||||
configureRescorers();
|
|
||||||
configureSorts();
|
configureSorts();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -491,8 +491,8 @@ public class SearchModule extends AbstractModule {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void configureRescorers() {
|
private void registerBuiltinRescorers() {
|
||||||
namedWriteableRegistry.registerPrototype(RescoreBuilder.class, QueryRescorerBuilder.PROTOTYPE);
|
namedWriteableRegistry.register(RescoreBuilder.class, QueryRescorerBuilder.NAME, QueryRescorerBuilder::new);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void configureSorts() {
|
private void configureSorts() {
|
||||||
|
|
|
@ -85,10 +85,7 @@ public enum QueryRescoreMode implements Writeable<QueryRescoreMode> {
|
||||||
|
|
||||||
public abstract float combine(float primary, float secondary);
|
public abstract float combine(float primary, float secondary);
|
||||||
|
|
||||||
static QueryRescoreMode PROTOTYPE = Total;
|
public static QueryRescoreMode readFromStream(StreamInput in) throws IOException {
|
||||||
|
|
||||||
@Override
|
|
||||||
public QueryRescoreMode readFrom(StreamInput in) throws IOException {
|
|
||||||
int ordinal = in.readVInt();
|
int ordinal = in.readVInt();
|
||||||
if (ordinal < 0 || ordinal >= values().length) {
|
if (ordinal < 0 || ordinal >= values().length) {
|
||||||
throw new IOException("Unknown ScoreMode ordinal [" + ordinal + "]");
|
throw new IOException("Unknown ScoreMode ordinal [" + ordinal + "]");
|
||||||
|
|
|
@ -25,7 +25,6 @@ import org.elasticsearch.common.io.stream.StreamInput;
|
||||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||||
import org.elasticsearch.common.xcontent.ObjectParser;
|
import org.elasticsearch.common.xcontent.ObjectParser;
|
||||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||||
import org.elasticsearch.index.query.MatchAllQueryBuilder;
|
|
||||||
import org.elasticsearch.index.query.QueryBuilder;
|
import org.elasticsearch.index.query.QueryBuilder;
|
||||||
import org.elasticsearch.index.query.QueryParseContext;
|
import org.elasticsearch.index.query.QueryParseContext;
|
||||||
import org.elasticsearch.index.query.QueryShardContext;
|
import org.elasticsearch.index.query.QueryShardContext;
|
||||||
|
@ -39,8 +38,6 @@ public class QueryRescorerBuilder extends RescoreBuilder<QueryRescorerBuilder> {
|
||||||
|
|
||||||
public static final String NAME = "query";
|
public static final String NAME = "query";
|
||||||
|
|
||||||
public static final QueryRescorerBuilder PROTOTYPE = new QueryRescorerBuilder(new MatchAllQueryBuilder());
|
|
||||||
|
|
||||||
public static final float DEFAULT_RESCORE_QUERYWEIGHT = 1.0f;
|
public static final float DEFAULT_RESCORE_QUERYWEIGHT = 1.0f;
|
||||||
public static final float DEFAULT_QUERYWEIGHT = 1.0f;
|
public static final float DEFAULT_QUERYWEIGHT = 1.0f;
|
||||||
public static final QueryRescoreMode DEFAULT_SCORE_MODE = QueryRescoreMode.Total;
|
public static final QueryRescoreMode DEFAULT_SCORE_MODE = QueryRescoreMode.Total;
|
||||||
|
@ -77,6 +74,25 @@ public class QueryRescorerBuilder extends RescoreBuilder<QueryRescorerBuilder> {
|
||||||
this.queryBuilder = builder;
|
this.queryBuilder = builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read from a stream.
|
||||||
|
*/
|
||||||
|
public QueryRescorerBuilder(StreamInput in) throws IOException {
|
||||||
|
super(in);
|
||||||
|
queryBuilder = in.readQuery();
|
||||||
|
scoreMode = QueryRescoreMode.readFromStream(in);
|
||||||
|
rescoreQueryWeight = in.readFloat();
|
||||||
|
queryWeight = in.readFloat();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void doWriteTo(StreamOutput out) throws IOException {
|
||||||
|
out.writeQuery(queryBuilder);
|
||||||
|
scoreMode.writeTo(out);
|
||||||
|
out.writeFloat(rescoreQueryWeight);
|
||||||
|
out.writeFloat(queryWeight);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the query used for this rescore query
|
* @return the query used for this rescore query
|
||||||
*/
|
*/
|
||||||
|
@ -140,9 +156,9 @@ public class QueryRescorerBuilder extends RescoreBuilder<QueryRescorerBuilder> {
|
||||||
builder.endObject();
|
builder.endObject();
|
||||||
}
|
}
|
||||||
|
|
||||||
public QueryRescorerBuilder fromXContent(QueryParseContext parseContext) throws IOException {
|
public static QueryRescorerBuilder fromXContent(QueryParseContext parseContext) throws IOException {
|
||||||
InnerBuilder innerBuilder = QUERY_RESCORE_PARSER.parse(parseContext.parser(), new InnerBuilder(), parseContext);
|
InnerBuilder innerBuilder = QUERY_RESCORE_PARSER.parse(parseContext.parser(), new InnerBuilder(), parseContext);
|
||||||
return innerBuilder.build();
|
return innerBuilder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -181,23 +197,6 @@ public class QueryRescorerBuilder extends RescoreBuilder<QueryRescorerBuilder> {
|
||||||
Objects.equals(queryBuilder, other.queryBuilder);
|
Objects.equals(queryBuilder, other.queryBuilder);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public QueryRescorerBuilder doReadFrom(StreamInput in) throws IOException {
|
|
||||||
QueryRescorerBuilder rescorer = new QueryRescorerBuilder(in.readQuery());
|
|
||||||
rescorer.setScoreMode(QueryRescoreMode.PROTOTYPE.readFrom(in));
|
|
||||||
rescorer.setRescoreQueryWeight(in.readFloat());
|
|
||||||
rescorer.setQueryWeight(in.readFloat());
|
|
||||||
return rescorer;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void doWriteTo(StreamOutput out) throws IOException {
|
|
||||||
out.writeQuery(queryBuilder);
|
|
||||||
scoreMode.writeTo(out);
|
|
||||||
out.writeFloat(rescoreQueryWeight);
|
|
||||||
out.writeFloat(queryWeight);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getWriteableName() {
|
public String getWriteableName() {
|
||||||
return NAME;
|
return NAME;
|
||||||
|
@ -208,7 +207,7 @@ public class QueryRescorerBuilder extends RescoreBuilder<QueryRescorerBuilder> {
|
||||||
* for the constructor of {@link QueryRescorerBuilder}, but {@link ObjectParser} only
|
* for the constructor of {@link QueryRescorerBuilder}, but {@link ObjectParser} only
|
||||||
* allows filling properties of an already constructed value.
|
* allows filling properties of an already constructed value.
|
||||||
*/
|
*/
|
||||||
private class InnerBuilder {
|
private static class InnerBuilder {
|
||||||
|
|
||||||
private QueryBuilder<?> queryBuilder;
|
private QueryBuilder<?> queryBuilder;
|
||||||
private float rescoreQueryWeight = DEFAULT_RESCORE_QUERYWEIGHT;
|
private float rescoreQueryWeight = DEFAULT_RESCORE_QUERYWEIGHT;
|
||||||
|
|
|
@ -46,6 +46,27 @@ public abstract class RescoreBuilder<RB extends RescoreBuilder<RB>> implements T
|
||||||
|
|
||||||
private static ParseField WINDOW_SIZE_FIELD = new ParseField("window_size");
|
private static ParseField WINDOW_SIZE_FIELD = new ParseField("window_size");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construct an empty RescoreBuilder.
|
||||||
|
*/
|
||||||
|
public RescoreBuilder() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read from a stream.
|
||||||
|
*/
|
||||||
|
protected RescoreBuilder(StreamInput in) throws IOException {
|
||||||
|
windowSize = in.readOptionalVInt();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public final void writeTo(StreamOutput out) throws IOException {
|
||||||
|
out.writeOptionalVInt(this.windowSize);
|
||||||
|
doWriteTo(out);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract void doWriteTo(StreamOutput out) throws IOException;
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public RB windowSize(int windowSize) {
|
public RB windowSize(int windowSize) {
|
||||||
this.windowSize = windowSize;
|
this.windowSize = windowSize;
|
||||||
|
@ -74,7 +95,7 @@ public abstract class RescoreBuilder<RB extends RescoreBuilder<RB>> implements T
|
||||||
} else if (token == XContentParser.Token.START_OBJECT) {
|
} else if (token == XContentParser.Token.START_OBJECT) {
|
||||||
// we only have QueryRescorer at this point
|
// we only have QueryRescorer at this point
|
||||||
if (QueryRescorerBuilder.NAME.equals(fieldName)) {
|
if (QueryRescorerBuilder.NAME.equals(fieldName)) {
|
||||||
rescorer = QueryRescorerBuilder.PROTOTYPE.fromXContent(parseContext);
|
rescorer = QueryRescorerBuilder.fromXContent(parseContext);
|
||||||
} else {
|
} else {
|
||||||
throw new ParsingException(parser.getTokenLocation(), "rescore doesn't support rescorer with name [" + fieldName + "]");
|
throw new ParsingException(parser.getTokenLocation(), "rescore doesn't support rescorer with name [" + fieldName + "]");
|
||||||
}
|
}
|
||||||
|
@ -128,23 +149,6 @@ public abstract class RescoreBuilder<RB extends RescoreBuilder<RB>> implements T
|
||||||
return Objects.equals(windowSize, other.windowSize);
|
return Objects.equals(windowSize, other.windowSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public RB readFrom(StreamInput in) throws IOException {
|
|
||||||
RB builder = doReadFrom(in);
|
|
||||||
builder.windowSize = in.readOptionalVInt();
|
|
||||||
return builder;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected abstract RB doReadFrom(StreamInput in) throws IOException;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void writeTo(StreamOutput out) throws IOException {
|
|
||||||
doWriteTo(out);
|
|
||||||
out.writeOptionalVInt(this.windowSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected abstract void doWriteTo(StreamOutput out) throws IOException;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final String toString() {
|
public final String toString() {
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -69,7 +69,6 @@ public class QueryRescoreBuilderTests extends ESTestCase {
|
||||||
@BeforeClass
|
@BeforeClass
|
||||||
public static void init() {
|
public static void init() {
|
||||||
namedWriteableRegistry = new NamedWriteableRegistry();
|
namedWriteableRegistry = new NamedWriteableRegistry();
|
||||||
namedWriteableRegistry.registerPrototype(RescoreBuilder.class, QueryRescorerBuilder.PROTOTYPE);
|
|
||||||
indicesQueriesRegistry = new SearchModule(Settings.EMPTY, namedWriteableRegistry).buildQueryParserRegistry();
|
indicesQueriesRegistry = new SearchModule(Settings.EMPTY, namedWriteableRegistry).buildQueryParserRegistry();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue