Skip to content

Commit 79060e6

Browse files
committed
working search on constant_keyword
1 parent 8747324 commit 79060e6

File tree

3 files changed

+14
-67
lines changed

3 files changed

+14
-67
lines changed

server/src/internalClusterTest/java/org/elasticsearch/search/fetch/subphase/highlight/HighlighterSearchIT.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
import static org.elasticsearch.index.query.QueryBuilders.constantScoreQuery;
7676
import static org.elasticsearch.index.query.QueryBuilders.existsQuery;
7777
import static org.elasticsearch.index.query.QueryBuilders.fuzzyQuery;
78+
import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery;
7879
import static org.elasticsearch.index.query.QueryBuilders.matchPhrasePrefixQuery;
7980
import static org.elasticsearch.index.query.QueryBuilders.matchPhraseQuery;
8081
import static org.elasticsearch.index.query.QueryBuilders.matchQuery;
@@ -3551,7 +3552,7 @@ public Analyzer get() {
35513552
}
35523553

35533554
public void testConstantKeywordFieldHighlighting() throws IOException {
3554-
// check that keyword highlighting works
3555+
// check that constant_keyword highlighting works
35553556
XContentBuilder mappings = jsonBuilder();
35563557
mappings.startObject();
35573558
mappings.startObject("_doc")
@@ -3573,24 +3574,21 @@ public void testConstantKeywordFieldHighlighting() throws IOException {
35733574
.setId("1")
35743575
.setSource(
35753576
jsonBuilder().startObject()
3576-
.field("level", "DEBUG")
3577-
.field("message", "some text")
3577+
.field("message", "some text")
35783578
.endObject()
35793579
)
35803580
.get();
35813581
refresh();
35823582
SearchResponse search = client().prepareSearch()
35833583
.setSource(
3584-
new SearchSourceBuilder().query(QueryBuilders.matchQuery("message", "some"))
3584+
new SearchSourceBuilder().query(QueryBuilders.termQuery("level", "DEBUG"))
35853585
.highlighter(new HighlightBuilder().field("*"))
35863586
)
35873587
.get();
35883588
assertNoFailures(search);
3589-
35903589
assertThat(
3591-
3592-
search.getHits().getAt(0).getHighlightFields().get("message").getFragments()[0].toString(),
3593-
equalTo("<em>some</em> text")
3590+
search.getHits().getAt(0).getHighlightFields().get("level").getFragments()[0].toString(),
3591+
equalTo("<em>DEBUG</em>")
35943592
);
35953593
}
35963594

server/src/internalClusterTest/java/org/elasticsearch/search/fetch/subphase/highlight/constantkeyword/MockConstantFieldMapper.java

Lines changed: 6 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,11 @@
88

99
package org.elasticsearch.search.fetch.subphase.highlight.constantkeyword;
1010

11-
import org.elasticsearch.common.lucene.Lucene;
12-
import org.elasticsearch.index.analysis.NamedAnalyzer;
1311
import org.elasticsearch.index.mapper.DocumentParserContext;
1412
import org.elasticsearch.index.mapper.FieldMapper;
1513
import org.elasticsearch.index.mapper.MapperBuilderContext;
16-
import org.elasticsearch.index.mapper.MapperParsingException;
17-
import org.elasticsearch.xcontent.XContentBuilder;
1814

1915
import java.util.Map;
20-
import java.util.Objects;
2116

2217
class MockConstantFieldMapper extends FieldMapper {
2318
@Override
@@ -34,35 +29,20 @@ private static MockConstantFieldMapper toType(FieldMapper in) {
3429

3530
public static class Builder extends FieldMapper.Builder {
3631

37-
// This is defined as updateable because it can be updated once, from [null] to any value,
38-
// by a dynamic mapping update. Once it has been set, however, the value cannot be changed.
39-
private final Parameter<String> value = new Parameter<>("value", true, () -> null, (n, c, o) -> {
40-
if (o instanceof Number == false && o instanceof CharSequence == false) {
41-
throw new MapperParsingException(
42-
"Property [value] on field [" + n + "] must be a number or a string, but got [" + o + "]"
43-
);
44-
}
45-
return o.toString();
46-
}, m -> toType(m).fieldType().value, XContentBuilder::field, Objects::toString);
47-
private final Parameter<Map<String, String>> meta = Parameter.metaParam();
32+
private final Parameter<String> value = Parameter.stringParam("value", false, m -> toType(m).fieldType().value, null);
4833

4934
protected Builder(String name) {
5035
super(name);
51-
value.setSerializerCheck((id, ic, v) -> v != null);
52-
value.setMergeValidator((previous, current, c) -> previous == null || Objects.equals(previous, current));
5336
}
5437

5538
@Override
5639
protected Parameter<?>[] getParameters() {
57-
return new Parameter<?>[]{value, meta};
40+
return new Parameter<?>[] { value };
5841
}
5942

6043
@Override
6144
public MockConstantFieldMapper build(MapperBuilderContext context) {
62-
return new MockConstantFieldMapper(
63-
name,
64-
new MockConstantFieldType(context.buildFullName(name), value.getValue(), meta.getValue())
65-
);
45+
return new MockConstantFieldMapper(name, new MockConstantFieldType(context.buildFullName(name), value.getValue(), Map.of()));
6646
}
6747
}
6848

@@ -72,21 +52,15 @@ public MockConstantFieldMapper build(MapperBuilderContext context) {
7252
}
7353

7454
@Override
75-
public Map<String, NamedAnalyzer> indexAnalyzers() {
76-
return Map.of(mappedFieldType.name(), Lucene.KEYWORD_ANALYZER);
77-
}
78-
79-
@Override
80-
protected void parseCreateField(DocumentParserContext context) {
81-
}
55+
protected void parseCreateField(DocumentParserContext context) {}
8256

8357
@Override
8458
protected String contentType() {
8559
return MockConstantFieldType.CONTENT_TYPE;
8660
}
8761

8862
@Override
89-
public Builder getMergeBuilder() {
90-
return new Builder(mappedFieldType.name());
63+
public FieldMapper.Builder getMergeBuilder() {
64+
return new Builder(mappedFieldType.name()).init(this);
9165
}
9266
}

server/src/internalClusterTest/java/org/elasticsearch/search/fetch/subphase/highlight/constantkeyword/MockConstantFieldType.java

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,13 @@
1515
import org.apache.lucene.search.Query;
1616
import org.apache.lucene.util.BytesRef;
1717
import org.elasticsearch.common.regex.Regex;
18-
import org.elasticsearch.index.fielddata.FieldData;
1918
import org.elasticsearch.index.fielddata.FieldDataContext;
2019
import org.elasticsearch.index.fielddata.IndexFieldData;
21-
import org.elasticsearch.index.fielddata.plain.ConstantIndexFieldData;
2220
import org.elasticsearch.index.mapper.ConstantFieldType;
2321
import org.elasticsearch.index.mapper.KeywordFieldMapper;
2422
import org.elasticsearch.index.mapper.ValueFetcher;
2523
import org.elasticsearch.index.query.SearchExecutionContext;
26-
import org.elasticsearch.script.field.KeywordDocValuesField;
27-
import org.elasticsearch.search.aggregations.support.CoreValuesSourceType;
2824

29-
import java.util.Locale;
3025
import java.util.Map;
3126

3227
public class MockConstantFieldType extends ConstantFieldType {
@@ -55,12 +50,7 @@ public String familyTypeName() {
5550

5651
@Override
5752
public IndexFieldData.Builder fielddataBuilder(FieldDataContext fieldDataContext) {
58-
return new ConstantIndexFieldData.Builder(
59-
value,
60-
name(),
61-
CoreValuesSourceType.KEYWORD,
62-
(dv, n) -> new KeywordDocValuesField(FieldData.toString(dv), n)
63-
);
53+
throw new UnsupportedOperationException();
6454
}
6555

6656
@Override
@@ -83,22 +73,7 @@ public Object valueForDisplay(Object value) {
8373

8474
@Override
8575
public TermsEnum getTerms(IndexReader reader, String prefix, boolean caseInsensitive, String searchAfter) {
86-
if (value == null) {
87-
return TermsEnum.EMPTY;
88-
}
89-
boolean matches = caseInsensitive
90-
? value.toLowerCase(Locale.ROOT).startsWith(prefix.toLowerCase(Locale.ROOT))
91-
: value.startsWith(prefix);
92-
if (matches == false) {
93-
return TermsEnum.EMPTY;
94-
}
95-
if (searchAfter != null) {
96-
if (searchAfter.compareTo(value) >= 0) {
97-
// The constant value is before the searchAfter value so must be ignored
98-
return TermsEnum.EMPTY;
99-
}
100-
}
101-
return TermsEnum.EMPTY;
76+
throw new UnsupportedOperationException();
10277
}
10378

10479
@Override

0 commit comments

Comments
 (0)