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:
Nik Everett 2016-03-24 12:03:30 -04:00
parent 5e8656aff0
commit 584ba6133d
5 changed files with 49 additions and 50 deletions

View File

@ -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() {

View File

@ -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 + "]");

View File

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

View File

@ -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 {

View File

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