move function score to ParseField
This commit is contained in:
parent
320f356030
commit
cb1ca92618
|
@ -197,22 +197,22 @@ public class FunctionScoreQueryBuilder extends AbstractQueryBuilder<FunctionScor
|
||||||
protected void doXContent(XContentBuilder builder, Params params) throws IOException {
|
protected void doXContent(XContentBuilder builder, Params params) throws IOException {
|
||||||
builder.startObject(NAME);
|
builder.startObject(NAME);
|
||||||
if (query != null) {
|
if (query != null) {
|
||||||
builder.field("query");
|
builder.field(FunctionScoreQueryParser.QUERY_FIELD.getPreferredName());
|
||||||
query.toXContent(builder, params);
|
query.toXContent(builder, params);
|
||||||
}
|
}
|
||||||
builder.startArray("functions");
|
builder.startArray(FunctionScoreQueryParser.FUNCTIONS_FIELD.getPreferredName());
|
||||||
for (FilterFunctionBuilder filterFunctionBuilder : filterFunctionBuilders) {
|
for (FilterFunctionBuilder filterFunctionBuilder : filterFunctionBuilders) {
|
||||||
filterFunctionBuilder.toXContent(builder, params);
|
filterFunctionBuilder.toXContent(builder, params);
|
||||||
}
|
}
|
||||||
builder.endArray();
|
builder.endArray();
|
||||||
|
|
||||||
builder.field("score_mode", scoreMode.name().toLowerCase(Locale.ROOT));
|
builder.field(FunctionScoreQueryParser.SCORE_MODE_FIELD.getPreferredName(), scoreMode.name().toLowerCase(Locale.ROOT));
|
||||||
if (boostMode != null) {
|
if (boostMode != null) {
|
||||||
builder.field("boost_mode", boostMode.name().toLowerCase(Locale.ROOT));
|
builder.field(FunctionScoreQueryParser.BOOST_MODE_FIELD.getPreferredName(), boostMode.name().toLowerCase(Locale.ROOT));
|
||||||
}
|
}
|
||||||
builder.field("max_boost", maxBoost);
|
builder.field(FunctionScoreQueryParser.MAX_BOOST_FIELD.getPreferredName(), maxBoost);
|
||||||
if (minScore != null) {
|
if (minScore != null) {
|
||||||
builder.field("min_score", minScore);
|
builder.field(FunctionScoreQueryParser.MIN_SCORE_FIELD.getPreferredName(), minScore);
|
||||||
}
|
}
|
||||||
printBoostAndQueryName(builder);
|
printBoostAndQueryName(builder);
|
||||||
builder.endObject();
|
builder.endObject();
|
||||||
|
@ -358,7 +358,7 @@ public class FunctionScoreQueryBuilder extends AbstractQueryBuilder<FunctionScor
|
||||||
@Override
|
@Override
|
||||||
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
|
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
|
||||||
builder.startObject();
|
builder.startObject();
|
||||||
builder.field("filter");
|
builder.field(FunctionScoreQueryParser.FILTER_FIELD.getPreferredName());
|
||||||
filter.toXContent(builder, params);
|
filter.toXContent(builder, params);
|
||||||
scoreFunction.toXContent(builder, params);
|
scoreFunction.toXContent(builder, params);
|
||||||
builder.endObject();
|
builder.endObject();
|
||||||
|
|
|
@ -50,6 +50,13 @@ public class FunctionScoreQueryParser implements QueryParser<FunctionScoreQueryB
|
||||||
static final String MISPLACED_FUNCTION_MESSAGE_PREFIX = "you can either define [functions] array or a single function, not both. ";
|
static final String MISPLACED_FUNCTION_MESSAGE_PREFIX = "you can either define [functions] array or a single function, not both. ";
|
||||||
|
|
||||||
public static final ParseField WEIGHT_FIELD = new ParseField("weight");
|
public static final ParseField WEIGHT_FIELD = new ParseField("weight");
|
||||||
|
public static final ParseField QUERY_FIELD = new ParseField("query");
|
||||||
|
public static final ParseField FILTER_FIELD = new ParseField("filter");
|
||||||
|
public static final ParseField FUNCTIONS_FIELD = new ParseField("functions");
|
||||||
|
public static final ParseField SCORE_MODE_FIELD = new ParseField("score_mode");
|
||||||
|
public static final ParseField BOOST_MODE_FIELD = new ParseField("boost_mode");
|
||||||
|
public static final ParseField MAX_BOOST_FIELD = new ParseField("max_boost");
|
||||||
|
public static final ParseField MIN_SCORE_FIELD = new ParseField("min_score");
|
||||||
|
|
||||||
private final ScoreFunctionParserMapper functionParserMapper;
|
private final ScoreFunctionParserMapper functionParserMapper;
|
||||||
|
|
||||||
|
@ -87,7 +94,7 @@ public class FunctionScoreQueryParser implements QueryParser<FunctionScoreQueryB
|
||||||
if (token == XContentParser.Token.FIELD_NAME) {
|
if (token == XContentParser.Token.FIELD_NAME) {
|
||||||
currentFieldName = parser.currentName();
|
currentFieldName = parser.currentName();
|
||||||
} else if (token == XContentParser.Token.START_OBJECT) {
|
} else if (token == XContentParser.Token.START_OBJECT) {
|
||||||
if ("query".equals(currentFieldName)) {
|
if (parseContext.parseFieldMatcher().match(currentFieldName, QUERY_FIELD)) {
|
||||||
if (query != null) {
|
if (query != null) {
|
||||||
throw new ParsingException(parser.getTokenLocation(), "failed to parse [{}] query. [query] is already defined.", FunctionScoreQueryBuilder.NAME);
|
throw new ParsingException(parser.getTokenLocation(), "failed to parse [{}] query. [query] is already defined.", FunctionScoreQueryBuilder.NAME);
|
||||||
}
|
}
|
||||||
|
@ -109,7 +116,7 @@ public class FunctionScoreQueryParser implements QueryParser<FunctionScoreQueryB
|
||||||
filterFunctionBuilders.add(new FunctionScoreQueryBuilder.FilterFunctionBuilder(scoreFunction));
|
filterFunctionBuilders.add(new FunctionScoreQueryBuilder.FilterFunctionBuilder(scoreFunction));
|
||||||
}
|
}
|
||||||
} else if (token == XContentParser.Token.START_ARRAY) {
|
} else if (token == XContentParser.Token.START_ARRAY) {
|
||||||
if ("functions".equals(currentFieldName)) {
|
if (parseContext.parseFieldMatcher().match(currentFieldName, FUNCTIONS_FIELD)) {
|
||||||
if (singleFunctionFound) {
|
if (singleFunctionFound) {
|
||||||
String errorString = "already found [" + singleFunctionName + "], now encountering [functions].";
|
String errorString = "already found [" + singleFunctionName + "], now encountering [functions].";
|
||||||
handleMisplacedFunctionsDeclaration(parser.getTokenLocation(), errorString);
|
handleMisplacedFunctionsDeclaration(parser.getTokenLocation(), errorString);
|
||||||
|
@ -121,17 +128,17 @@ public class FunctionScoreQueryParser implements QueryParser<FunctionScoreQueryB
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (token.isValue()) {
|
} else if (token.isValue()) {
|
||||||
if ("score_mode".equals(currentFieldName) || "scoreMode".equals(currentFieldName)) {
|
if (parseContext.parseFieldMatcher().match(currentFieldName, SCORE_MODE_FIELD)) {
|
||||||
scoreMode = FiltersFunctionScoreQuery.ScoreMode.fromString(parser.text());
|
scoreMode = FiltersFunctionScoreQuery.ScoreMode.fromString(parser.text());
|
||||||
} else if ("boost_mode".equals(currentFieldName) || "boostMode".equals(currentFieldName)) {
|
} else if (parseContext.parseFieldMatcher().match(currentFieldName, BOOST_MODE_FIELD)) {
|
||||||
combineFunction = CombineFunction.fromString(parser.text());
|
combineFunction = CombineFunction.fromString(parser.text());
|
||||||
} else if ("max_boost".equals(currentFieldName) || "maxBoost".equals(currentFieldName)) {
|
} else if (parseContext.parseFieldMatcher().match(currentFieldName, MAX_BOOST_FIELD)) {
|
||||||
maxBoost = parser.floatValue();
|
maxBoost = parser.floatValue();
|
||||||
} else if ("boost".equals(currentFieldName)) {
|
} else if (parseContext.parseFieldMatcher().match(currentFieldName, AbstractQueryBuilder.BOOST_FIELD)) {
|
||||||
boost = parser.floatValue();
|
boost = parser.floatValue();
|
||||||
} else if ("_name".equals(currentFieldName)) {
|
} else if (parseContext.parseFieldMatcher().match(currentFieldName, AbstractQueryBuilder.NAME_FIELD)) {
|
||||||
queryName = parser.text();
|
queryName = parser.text();
|
||||||
} else if ("min_score".equals(currentFieldName) || "minScore".equals(currentFieldName)) {
|
} else if (parseContext.parseFieldMatcher().match(currentFieldName, MIN_SCORE_FIELD)) {
|
||||||
minScore = parser.floatValue();
|
minScore = parser.floatValue();
|
||||||
} else {
|
} else {
|
||||||
if (singleFunctionFound) {
|
if (singleFunctionFound) {
|
||||||
|
@ -189,7 +196,7 @@ public class FunctionScoreQueryParser implements QueryParser<FunctionScoreQueryB
|
||||||
if (token == XContentParser.Token.FIELD_NAME) {
|
if (token == XContentParser.Token.FIELD_NAME) {
|
||||||
currentFieldName = parser.currentName();
|
currentFieldName = parser.currentName();
|
||||||
} else if (token == XContentParser.Token.START_OBJECT) {
|
} else if (token == XContentParser.Token.START_OBJECT) {
|
||||||
if ("filter".equals(currentFieldName)) {
|
if (parseContext.parseFieldMatcher().match(currentFieldName, FILTER_FIELD)) {
|
||||||
filter = parseContext.parseInnerQueryBuilder();
|
filter = parseContext.parseInnerQueryBuilder();
|
||||||
} else {
|
} else {
|
||||||
if (scoreFunction != null) {
|
if (scoreFunction != null) {
|
||||||
|
|
Loading…
Reference in New Issue