Switch internal representation of order to enum
This commit is contained in:
parent
659bab7105
commit
6f16317a4b
|
@ -805,7 +805,7 @@ public final class SearchSourceBuilder extends ToXContentToBytes implements Writ
|
|||
}
|
||||
builder.aggregations = aggregations;
|
||||
} else if (context.parseFieldMatcher().match(currentFieldName, HIGHLIGHT_FIELD)) {
|
||||
builder.highlightBuilder = HighlightBuilder.fromXContent(context);
|
||||
builder.highlightBuilder = HighlightBuilder.PROTOTYPE.fromXContent(context);
|
||||
} else if (context.parseFieldMatcher().match(currentFieldName, INNER_HITS_FIELD)) {
|
||||
XContentBuilder xContentBuilder = XContentFactory.jsonBuilder().copyCurrentStructure(parser);
|
||||
builder.innerHitsBuilder = xContentBuilder.bytes();
|
||||
|
|
|
@ -29,6 +29,8 @@ import org.elasticsearch.common.xcontent.XContentBuilder;
|
|||
import org.elasticsearch.common.xcontent.XContentParser;
|
||||
import org.elasticsearch.index.query.QueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryParseContext;
|
||||
import org.elasticsearch.search.highlight.HighlightBuilder.Order;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
|
@ -78,7 +80,7 @@ public abstract class AbstractHighlighterBuilder<HB extends AbstractHighlighterB
|
|||
|
||||
protected QueryBuilder<?> highlightQuery;
|
||||
|
||||
protected String order;
|
||||
protected Order order;
|
||||
|
||||
protected Boolean highlightFilter;
|
||||
|
||||
|
@ -217,18 +219,26 @@ public abstract class AbstractHighlighterBuilder<HB extends AbstractHighlighterB
|
|||
/**
|
||||
* The order of fragments per field. By default, ordered by the order in the
|
||||
* highlighted text. Can be <tt>score</tt>, which then it will be ordered
|
||||
* by score of the fragments.
|
||||
* by score of the fragments, or <tt>none</TT>.
|
||||
*/
|
||||
public HB order(String order) {
|
||||
return order(Order.fromString(order));
|
||||
}
|
||||
|
||||
/**
|
||||
* By default, fragments of a field are ordered by the order in the highlighted text.
|
||||
* If set to {@link Order#SCORE}, this changes order to score of the fragments.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public HB order(String order) {
|
||||
this.order = order;
|
||||
public HB order(Order scoreOrdered) {
|
||||
this.order = scoreOrdered;
|
||||
return (HB) this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the value set by {@link #order(String)}
|
||||
* @return the value set by {@link #order(Order)}
|
||||
*/
|
||||
public String order() {
|
||||
public Order order() {
|
||||
return this.order;
|
||||
}
|
||||
|
||||
|
@ -395,7 +405,7 @@ public abstract class AbstractHighlighterBuilder<HB extends AbstractHighlighterB
|
|||
builder.field(HIGHLIGHT_QUERY_FIELD.getPreferredName(), highlightQuery);
|
||||
}
|
||||
if (order != null) {
|
||||
builder.field(ORDER_FIELD.getPreferredName(), order);
|
||||
builder.field(ORDER_FIELD.getPreferredName(), order.toString());
|
||||
}
|
||||
if (highlightFilter != null) {
|
||||
builder.field(HIGHLIGHT_FILTER_FIELD.getPreferredName(), highlightFilter);
|
||||
|
@ -458,7 +468,7 @@ public abstract class AbstractHighlighterBuilder<HB extends AbstractHighlighterB
|
|||
}
|
||||
} else if (token.isValue()) {
|
||||
if (parseContext.parseFieldMatcher().match(currentFieldName, ORDER_FIELD)) {
|
||||
highlightBuilder.order(parser.text());
|
||||
highlightBuilder.order(Order.fromString(parser.text()));
|
||||
} else if (parseContext.parseFieldMatcher().match(currentFieldName, HIGHLIGHT_FILTER_FIELD)) {
|
||||
highlightBuilder.highlightFilter(parser.booleanValue());
|
||||
} else if (parseContext.parseFieldMatcher().match(currentFieldName, FRAGMENT_SIZE_FIELD)) {
|
||||
|
@ -578,7 +588,9 @@ public abstract class AbstractHighlighterBuilder<HB extends AbstractHighlighterB
|
|||
if (in.readBoolean()) {
|
||||
highlightQuery(in.readQuery());
|
||||
}
|
||||
order(in.readOptionalString());
|
||||
if (in.readBoolean()) {
|
||||
order(Order.PROTOTYPE.readFrom(in));
|
||||
}
|
||||
highlightFilter(in.readOptionalBoolean());
|
||||
forceSource(in.readOptionalBoolean());
|
||||
boundaryMaxScan(in.readOptionalVInt());
|
||||
|
@ -609,7 +621,11 @@ public abstract class AbstractHighlighterBuilder<HB extends AbstractHighlighterB
|
|||
if (hasQuery) {
|
||||
out.writeQuery(highlightQuery);
|
||||
}
|
||||
out.writeOptionalString(order);
|
||||
boolean hasSetOrder = order != null;
|
||||
out.writeBoolean(hasSetOrder);
|
||||
if (hasSetOrder) {
|
||||
order.writeTo(out);
|
||||
}
|
||||
out.writeOptionalBoolean(highlightFilter);
|
||||
out.writeOptionalBoolean(forceSource);
|
||||
out.writeOptionalVInt(boundaryMaxScan);
|
||||
|
|
|
@ -44,6 +44,7 @@ import java.util.Collection;
|
|||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
||||
|
@ -315,7 +316,7 @@ public class HighlightBuilder extends AbstractHighlighterBuilder<HighlightBuilde
|
|||
targetOptionsBuilder.postTags(highlighterBuilder.postTags);
|
||||
}
|
||||
if (highlighterBuilder.order != null) {
|
||||
targetOptionsBuilder.scoreOrdered("score".equals(highlighterBuilder.order));
|
||||
targetOptionsBuilder.scoreOrdered(highlighterBuilder.order == Order.SCORE);
|
||||
}
|
||||
if (highlighterBuilder.highlightFilter != null) {
|
||||
targetOptionsBuilder.highlightFilter(highlighterBuilder.highlightFilter);
|
||||
|
@ -559,4 +560,36 @@ public class HighlightBuilder extends AbstractHighlighterBuilder<HighlightBuilde
|
|||
writeOptionsTo(out);
|
||||
}
|
||||
}
|
||||
|
||||
public enum Order implements Writeable<Order> {
|
||||
NONE, SCORE;
|
||||
|
||||
static Order PROTOTYPE = NONE;
|
||||
|
||||
@Override
|
||||
public Order readFrom(StreamInput in) throws IOException {
|
||||
int ordinal = in.readVInt();
|
||||
if (ordinal < 0 || ordinal >= values().length) {
|
||||
throw new IOException("Unknown Order ordinal [" + ordinal + "]");
|
||||
}
|
||||
return values()[ordinal];
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeTo(StreamOutput out) throws IOException {
|
||||
out.writeVInt(this.ordinal());
|
||||
}
|
||||
|
||||
public static Order fromString(String order) {
|
||||
if (order.toUpperCase(Locale.ROOT).equals(SCORE.name())) {
|
||||
return Order.SCORE;
|
||||
}
|
||||
return NONE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return name().toLowerCase(Locale.ROOT);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -53,6 +53,7 @@ import org.elasticsearch.index.query.TermQueryBuilder;
|
|||
import org.elasticsearch.index.query.TermQueryParser;
|
||||
import org.elasticsearch.indices.query.IndicesQueriesRegistry;
|
||||
import org.elasticsearch.search.highlight.HighlightBuilder.Field;
|
||||
import org.elasticsearch.search.highlight.HighlightBuilder.Order;
|
||||
import org.elasticsearch.search.highlight.SearchContextHighlight.FieldOptions;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.IndexSettingsModule;
|
||||
|
@ -148,7 +149,6 @@ public class HighlightBuilderTests extends ESTestCase {
|
|||
context.parseFieldMatcher(new ParseFieldMatcher(Settings.EMPTY));
|
||||
for (int runs = 0; runs < NUMBER_OF_TESTBUILDERS; runs++) {
|
||||
HighlightBuilder highlightBuilder = randomHighlighterBuilder();
|
||||
System.out.println(highlightBuilder);
|
||||
XContentBuilder builder = XContentFactory.contentBuilder(randomFrom(XContentType.values()));
|
||||
if (randomBoolean()) {
|
||||
builder.prettyPrint();
|
||||
|
@ -487,7 +487,12 @@ public class HighlightBuilderTests extends ESTestCase {
|
|||
highlightBuilder.highlightQuery(highlightQuery);
|
||||
}
|
||||
if (randomBoolean()) {
|
||||
highlightBuilder.order(randomAsciiOfLengthBetween(1, 10));
|
||||
if (randomBoolean()) {
|
||||
highlightBuilder.order(randomFrom(Order.values()));
|
||||
} else {
|
||||
// also test the string setter
|
||||
highlightBuilder.order(randomFrom(Order.values()).toString());
|
||||
}
|
||||
}
|
||||
if (randomBoolean()) {
|
||||
highlightBuilder.highlightFilter(randomBoolean());
|
||||
|
@ -556,7 +561,11 @@ public class HighlightBuilderTests extends ESTestCase {
|
|||
highlightBuilder.highlightQuery(new TermQueryBuilder(randomAsciiOfLengthBetween(11, 20), randomAsciiOfLengthBetween(11, 20)));
|
||||
break;
|
||||
case 8:
|
||||
highlightBuilder.order(randomAsciiOfLengthBetween(11, 20));
|
||||
if (highlightBuilder.order() == Order.NONE) {
|
||||
highlightBuilder.order(Order.SCORE);
|
||||
} else {
|
||||
highlightBuilder.order(Order.NONE);
|
||||
}
|
||||
break;
|
||||
case 9:
|
||||
highlightBuilder.highlightFilter(toggleOrSet(highlightBuilder.highlightFilter()));
|
||||
|
|
Loading…
Reference in New Issue