From c9a27b020f8088e90e165527e78c88946df04a7b Mon Sep 17 00:00:00 2001 From: Gao Binlong Date: Mon, 23 Oct 2023 20:02:04 +0800 Subject: [PATCH 01/10] Fix match_phrase_prefix_query not working on text field with multiple values and index_prefixes Signed-off-by: Gao Binlong --- CHANGELOG.md | 1 + .../test/search/190_index_prefix_search.yml | 19 +++++++ .../index/mapper/TextFieldMapper.java | 20 ++++++- .../index/mapper/TextFieldMapperTests.java | 52 +++++++++++++++++++ 4 files changed, 90 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b40878066960a..cc0029e35955c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -130,6 +130,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Fix class_cast_exception when passing int to _version and other metadata fields in ingest simulate API ([#10101](https://github.com/opensearch-project/OpenSearch/pull/10101)) - Fix Segment Replication ShardLockObtainFailedException bug during index corruption ([10370](https://github.com/opensearch-project/OpenSearch/pull/10370)) - Fix some test methods in SimulatePipelineRequestParsingTests never run and fix test failure ([#10496](https://github.com/opensearch-project/OpenSearch/pull/10496)) +- Fix match_phrase_prefix_query not working on text field with multiple values and index_prefixes ### Security diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/search/190_index_prefix_search.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/search/190_index_prefix_search.yml index 25d3dd160e031..a140fcdbbec78 100644 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/search/190_index_prefix_search.yml +++ b/rest-api-spec/src/main/resources/rest-api-spec/test/search/190_index_prefix_search.yml @@ -16,6 +16,11 @@ setup: index: test id: 1 body: { text: some short words with a stupendously long one } + - do: + index: + index: test + id: 3 + body: { text: ["a", "b-12"] } - do: index: @@ -23,6 +28,7 @@ setup: id: 2 body: { text: sentence with UPPERCASE WORDS } + - do: indices.refresh: index: [test] @@ -116,3 +122,16 @@ setup: ] - match: {hits.total: 1} + +--- +"search index prefixes with multiple value": + - do: + search: + rest_total_hits_as_int: true + index: test + body: + query: + match_phrase_prefix: + text: "b-12" + + - match: {hits.total: 1} diff --git a/server/src/main/java/org/opensearch/index/mapper/TextFieldMapper.java b/server/src/main/java/org/opensearch/index/mapper/TextFieldMapper.java index 1d0d1ae2bd899..557e7a7938f4e 100644 --- a/server/src/main/java/org/opensearch/index/mapper/TextFieldMapper.java +++ b/server/src/main/java/org/opensearch/index/mapper/TextFieldMapper.java @@ -523,12 +523,14 @@ private static class PrefixWrappedAnalyzer extends AnalyzerWrapper { private final int minChars; private final int maxChars; private final Analyzer delegate; + private final int positionIncrementGap; - PrefixWrappedAnalyzer(Analyzer delegate, int minChars, int maxChars) { + PrefixWrappedAnalyzer(Analyzer delegate, int minChars, int maxChars, int positionIncrementGap) { super(delegate.getReuseStrategy()); this.delegate = delegate; this.minChars = minChars; this.maxChars = maxChars; + this.positionIncrementGap = positionIncrementGap; } @Override @@ -536,6 +538,11 @@ protected Analyzer getWrappedAnalyzer(String fieldName) { return delegate; } + @Override + public int getPositionIncrementGap(String fieldName) { + return positionIncrementGap; + } + @Override protected TokenStreamComponents wrapComponents(String fieldName, TokenStreamComponents components) { TokenFilter filter = new EdgeNGramTokenFilter(components.getTokenStream(), minChars, maxChars, false); @@ -611,7 +618,16 @@ public ValueFetcher valueFetcher(QueryShardContext context, SearchLookup searchL void setAnalyzer(NamedAnalyzer delegate) { setIndexAnalyzer( - new NamedAnalyzer(delegate.name(), AnalyzerScope.INDEX, new PrefixWrappedAnalyzer(delegate.analyzer(), minChars, maxChars)) + new NamedAnalyzer( + delegate.name(), + AnalyzerScope.INDEX, + new PrefixWrappedAnalyzer( + delegate.analyzer(), + minChars, + maxChars, + parentField.indexAnalyzer().getPositionIncrementGap(parentField.name()) + ) + ) ); } diff --git a/server/src/test/java/org/opensearch/index/mapper/TextFieldMapperTests.java b/server/src/test/java/org/opensearch/index/mapper/TextFieldMapperTests.java index a9b902e121bda..5a9a1ccff01ad 100644 --- a/server/src/test/java/org/opensearch/index/mapper/TextFieldMapperTests.java +++ b/server/src/test/java/org/opensearch/index/mapper/TextFieldMapperTests.java @@ -233,6 +233,7 @@ public TokenStream create(TokenStream tokenStream) { Map.of(), Map.of() ); + } @Override @@ -368,6 +369,57 @@ public void testIndexOptions() throws IOException { } } + public void testPositionIncrementGapOnIndexPrefixField() throws IOException { + // test default position_increment_gap + MapperService mapperService = createMapperService( + fieldMapping(b -> b.field("type", "text").field("analyzer", "default").startObject("index_prefixes").endObject()) + ); + ParsedDocument doc = mapperService.documentMapper().parse(source(b -> b.array("field", new String[] { "a", "b 12" }))); + + withLuceneIndex(mapperService, iw -> iw.addDocument(doc.rootDoc()), reader -> { + TermsEnum terms = getOnlyLeafReader(reader).terms("field").iterator(); + assertTrue(terms.seekExact(new BytesRef("12"))); + PostingsEnum postings = terms.postings(null, PostingsEnum.POSITIONS); + assertEquals(0, postings.nextDoc()); + assertEquals(TextFieldMapper.Defaults.POSITION_INCREMENT_GAP + 2, postings.nextPosition()); + }); + + withLuceneIndex(mapperService, iw -> iw.addDocument(doc.rootDoc()), reader -> { + TermsEnum terms = getOnlyLeafReader(reader).terms("field._index_prefix").iterator(); + assertTrue(terms.seekExact(new BytesRef("12"))); + PostingsEnum postings = terms.postings(null, PostingsEnum.POSITIONS); + assertEquals(0, postings.nextDoc()); + assertEquals(TextFieldMapper.Defaults.POSITION_INCREMENT_GAP + 2, postings.nextPosition()); + }); + + // test custom position_increment_gap + final int positionIncrementGap = randomIntBetween(1, 1000); + MapperService mapperService2 = createMapperService( + fieldMapping( + b -> b.field("type", "text") + .field("position_increment_gap", positionIncrementGap) + .field("analyzer", "default") + .startObject("index_prefixes") + .endObject() + ) + ); + ParsedDocument doc2 = mapperService2.documentMapper().parse(source(b -> b.array("field", new String[] { "a", "b 12" }))); + withLuceneIndex(mapperService2, iw -> iw.addDocument(doc2.rootDoc()), reader -> { + TermsEnum terms = getOnlyLeafReader(reader).terms("field").iterator(); + assertTrue(terms.seekExact(new BytesRef("12"))); + PostingsEnum postings = terms.postings(null, PostingsEnum.POSITIONS); + assertEquals(0, postings.nextDoc()); + assertEquals(positionIncrementGap + 2, postings.nextPosition()); + }); + withLuceneIndex(mapperService2, iw -> iw.addDocument(doc2.rootDoc()), reader -> { + TermsEnum terms = getOnlyLeafReader(reader).terms("field._index_prefix").iterator(); + assertTrue(terms.seekExact(new BytesRef("12"))); + PostingsEnum postings = terms.postings(null, PostingsEnum.POSITIONS); + assertEquals(0, postings.nextDoc()); + assertEquals(positionIncrementGap + 2, postings.nextPosition()); + }); + } + public void testDefaultPositionIncrementGap() throws IOException { MapperService mapperService = createMapperService(fieldMapping(this::minimalMapping)); ParsedDocument doc = mapperService.documentMapper().parse(source(b -> b.array("field", new String[] { "a", "b" }))); From 428c851812d9e7fdbdd50ec51a1b9765b1940bed Mon Sep 17 00:00:00 2001 From: Gao Binlong Date: Fri, 27 Oct 2023 17:47:07 +0800 Subject: [PATCH 02/10] Add more test Signed-off-by: Gao Binlong --- .../test/search/190_index_prefix_search.yml | 32 ++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/search/190_index_prefix_search.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/search/190_index_prefix_search.yml index a140fcdbbec78..30b82c82b06dd 100644 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/search/190_index_prefix_search.yml +++ b/rest-api-spec/src/main/resources/rest-api-spec/test/search/190_index_prefix_search.yml @@ -10,12 +10,24 @@ setup: index_prefixes: min_chars: 2 max_chars: 5 - + text_with_pos_inc_gap: + type: text + text_with_pos_inc_gap: 201 + index_prefixes: + min_chars: 2 + max_chars: 5 - do: index: index: test id: 1 body: { text: some short words with a stupendously long one } + + - do: + index: + index: test + id: 2 + body: { text: sentence with UPPERCASE WORDS } + - do: index: index: test @@ -25,9 +37,8 @@ setup: - do: index: index: test - id: 2 - body: { text: sentence with UPPERCASE WORDS } - + id: 4 + body: { text_with_pos_inc_gap: ["a", "b-12"] } - do: indices.refresh: @@ -135,3 +146,16 @@ setup: text: "b-12" - match: {hits.total: 1} + +--- +"search index prefixes with multiple value": + - do: + search: + rest_total_hits_as_int: true + index: test + body: + query: + match_phrase_prefix: + text_with_pos_inc_gap: "b-12" + + - match: {hits.total: 1} From 38aca3324787faf38b6f151cb73a711b606f2e3d Mon Sep 17 00:00:00 2001 From: Gao Binlong Date: Fri, 27 Oct 2023 17:48:05 +0800 Subject: [PATCH 03/10] modify change log Signed-off-by: Gao Binlong --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cc0029e35955c..cc5c354bec449 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -130,7 +130,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - Fix class_cast_exception when passing int to _version and other metadata fields in ingest simulate API ([#10101](https://github.com/opensearch-project/OpenSearch/pull/10101)) - Fix Segment Replication ShardLockObtainFailedException bug during index corruption ([10370](https://github.com/opensearch-project/OpenSearch/pull/10370)) - Fix some test methods in SimulatePipelineRequestParsingTests never run and fix test failure ([#10496](https://github.com/opensearch-project/OpenSearch/pull/10496)) -- Fix match_phrase_prefix_query not working on text field with multiple values and index_prefixes +- Fix match_phrase_prefix_query not working on text field with multiple values and index_prefixes ([#10959](https://github.com/opensearch-project/OpenSearch/pull/10959)) ### Security From 7e9261c9ffeb50d35a6359d6974b245db973e449 Mon Sep 17 00:00:00 2001 From: Gao Binlong Date: Mon, 30 Oct 2023 15:14:00 +0800 Subject: [PATCH 04/10] Fix test failure Signed-off-by: Gao Binlong --- .../rest-api-spec/test/search/190_index_prefix_search.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/search/190_index_prefix_search.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/search/190_index_prefix_search.yml index 30b82c82b06dd..baa214005bcd2 100644 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/search/190_index_prefix_search.yml +++ b/rest-api-spec/src/main/resources/rest-api-spec/test/search/190_index_prefix_search.yml @@ -12,7 +12,7 @@ setup: max_chars: 5 text_with_pos_inc_gap: type: text - text_with_pos_inc_gap: 201 + position_increment_gap: 201 index_prefixes: min_chars: 2 max_chars: 5 @@ -32,13 +32,13 @@ setup: index: index: test id: 3 - body: { text: ["a", "b-12"] } + body: { text: ["foo", "b-12"] } - do: index: index: test id: 4 - body: { text_with_pos_inc_gap: ["a", "b-12"] } + body: { text_with_pos_inc_gap: ["foo", "b-12"] } - do: indices.refresh: @@ -148,7 +148,7 @@ setup: - match: {hits.total: 1} --- -"search index prefixes with multiple value": +"search index prefixes with multiple value and custom position_increment_gap": - do: search: rest_total_hits_as_int: true From 84afd89c0a39564e5850b5473c17b318fad58784 Mon Sep 17 00:00:00 2001 From: Gao Binlong Date: Fri, 3 Nov 2023 16:39:25 +0800 Subject: [PATCH 05/10] Change the indexAnalyzer used by prefix field Signed-off-by: Gao Binlong --- .../org/opensearch/index/mapper/TextFieldMapper.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/server/src/main/java/org/opensearch/index/mapper/TextFieldMapper.java b/server/src/main/java/org/opensearch/index/mapper/TextFieldMapper.java index 557e7a7938f4e..ab0124556c939 100644 --- a/server/src/main/java/org/opensearch/index/mapper/TextFieldMapper.java +++ b/server/src/main/java/org/opensearch/index/mapper/TextFieldMapper.java @@ -449,7 +449,7 @@ private PrefixFieldMapper buildPrefixMapper(BuilderContext context, FieldType fi pft.setStoreTermVectorOffsets(true); } PrefixFieldType prefixFieldType = new PrefixFieldType(tft, fullName + "._index_prefix", indexPrefixes.get()); - prefixFieldType.setAnalyzer(analyzers.getIndexAnalyzer()); + prefixFieldType.setAnalyzer(tft.indexAnalyzer()); tft.setPrefixFieldType(prefixFieldType); return new PrefixFieldMapper(pft, prefixFieldType); } @@ -621,12 +621,7 @@ void setAnalyzer(NamedAnalyzer delegate) { new NamedAnalyzer( delegate.name(), AnalyzerScope.INDEX, - new PrefixWrappedAnalyzer( - delegate.analyzer(), - minChars, - maxChars, - parentField.indexAnalyzer().getPositionIncrementGap(parentField.name()) - ) + new PrefixWrappedAnalyzer(delegate.analyzer(), minChars, maxChars, delegate.getPositionIncrementGap(name())) ) ); } From 6da2749cf2e9ff6d9f28846d9b29f830fef2e3ae Mon Sep 17 00:00:00 2001 From: Gao Binlong Date: Mon, 6 Nov 2023 11:08:59 +0800 Subject: [PATCH 06/10] Skip old version for yaml test Signed-off-by: Gao Binlong --- .../rest-api-spec/test/search/190_index_prefix_search.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/search/190_index_prefix_search.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/search/190_index_prefix_search.yml index baa214005bcd2..ac2cc4ad202c1 100644 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/search/190_index_prefix_search.yml +++ b/rest-api-spec/src/main/resources/rest-api-spec/test/search/190_index_prefix_search.yml @@ -136,6 +136,9 @@ setup: --- "search index prefixes with multiple value": + - skip: + version: " - 2.11.99" + reason: "the position_increment_gap was fixed in 2.12" - do: search: rest_total_hits_as_int: true @@ -149,6 +152,9 @@ setup: --- "search index prefixes with multiple value and custom position_increment_gap": + - skip: + version: " - 2.11.99" + reason: "the position_increment_gap was fixed in 2.12" - do: search: rest_total_hits_as_int: true From 4d4484d52813cb568700a1c2a35f8b9e243e89f5 Mon Sep 17 00:00:00 2001 From: Gao Binlong Date: Thu, 16 Nov 2023 13:25:04 +0800 Subject: [PATCH 07/10] Optimize some code Signed-off-by: Gao Binlong --- .../index/mapper/TextFieldMapper.java | 18 +++++++++--------- .../index/mapper/TextFieldTypeTests.java | 1 + 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/server/src/main/java/org/opensearch/index/mapper/TextFieldMapper.java b/server/src/main/java/org/opensearch/index/mapper/TextFieldMapper.java index ab0124556c939..c4996400d31e9 100644 --- a/server/src/main/java/org/opensearch/index/mapper/TextFieldMapper.java +++ b/server/src/main/java/org/opensearch/index/mapper/TextFieldMapper.java @@ -449,7 +449,6 @@ private PrefixFieldMapper buildPrefixMapper(BuilderContext context, FieldType fi pft.setStoreTermVectorOffsets(true); } PrefixFieldType prefixFieldType = new PrefixFieldType(tft, fullName + "._index_prefix", indexPrefixes.get()); - prefixFieldType.setAnalyzer(tft.indexAnalyzer()); tft.setPrefixFieldType(prefixFieldType); return new PrefixFieldMapper(pft, prefixFieldType); } @@ -596,17 +595,18 @@ static final class PrefixFieldType extends StringFieldType { final int minChars; final int maxChars; - final TextFieldType parentField; + final TextFieldType parent; PrefixFieldType(TextFieldType parentField, String name, PrefixConfig config) { this(parentField, name, config.minChars, config.maxChars); } - PrefixFieldType(TextFieldType parentField, String name, int minChars, int maxChars) { - super(name, true, false, false, parentField.getTextSearchInfo(), Collections.emptyMap()); + PrefixFieldType(TextFieldType parent, String name, int minChars, int maxChars) { + super(name, true, false, false, parent.getTextSearchInfo(), Collections.emptyMap()); this.minChars = minChars; this.maxChars = maxChars; - this.parentField = parentField; + this.parent = parent; + setAnalyzer(parent.indexAnalyzer().name(), parent.indexAnalyzer()); } @Override @@ -616,12 +616,12 @@ public ValueFetcher valueFetcher(QueryShardContext context, SearchLookup searchL return SourceValueFetcher.toString(name(), context, format); } - void setAnalyzer(NamedAnalyzer delegate) { + void setAnalyzer(String name, NamedAnalyzer delegate) { setIndexAnalyzer( new NamedAnalyzer( - delegate.name(), + name, AnalyzerScope.INDEX, - new PrefixWrappedAnalyzer(delegate.analyzer(), minChars, maxChars, delegate.getPositionIncrementGap(name())) + new PrefixWrappedAnalyzer(delegate.analyzer(), minChars, maxChars, delegate.getPositionIncrementGap(name)) ) ); } @@ -651,7 +651,7 @@ public Query prefixQuery(String value, MultiTermQuery.RewriteMethod method, bool Automaton automaton = Operations.concatenate(automata); AutomatonQuery query = AutomatonQueries.createAutomatonQuery(new Term(name(), value + "*"), automaton, method); return new BooleanQuery.Builder().add(query, BooleanClause.Occur.SHOULD) - .add(new TermQuery(new Term(parentField.name(), value)), BooleanClause.Occur.SHOULD) + .add(new TermQuery(new Term(parent.name(), value)), BooleanClause.Occur.SHOULD) .build(); } diff --git a/server/src/test/java/org/opensearch/index/mapper/TextFieldTypeTests.java b/server/src/test/java/org/opensearch/index/mapper/TextFieldTypeTests.java index 0592a972db5e9..f4abe09311462 100644 --- a/server/src/test/java/org/opensearch/index/mapper/TextFieldTypeTests.java +++ b/server/src/test/java/org/opensearch/index/mapper/TextFieldTypeTests.java @@ -163,6 +163,7 @@ public void testFuzzyQuery() { public void testIndexPrefixes() { TextFieldType ft = createFieldType(); + ft.setIndexAnalyzer(Lucene.STANDARD_ANALYZER); ft.setPrefixFieldType(new TextFieldMapper.PrefixFieldType(ft, "field._index_prefix", 2, 10)); Query q = ft.prefixQuery("goin", CONSTANT_SCORE_REWRITE, false, randomMockShardContext()); From 8874093313031ddab3bca0a5b21ec87c8bfda11c Mon Sep 17 00:00:00 2001 From: Gao Binlong Date: Fri, 5 Jan 2024 11:19:06 +0800 Subject: [PATCH 08/10] Fix test failure Signed-off-by: Gao Binlong --- .../rest-api-spec/test/search/190_index_prefix_search.yml | 8 ++++---- .../org/opensearch/index/mapper/TextFieldTypeTests.java | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/search/190_index_prefix_search.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/search/190_index_prefix_search.yml index ac2cc4ad202c1..92ff605a3e2d2 100644 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/search/190_index_prefix_search.yml +++ b/rest-api-spec/src/main/resources/rest-api-spec/test/search/190_index_prefix_search.yml @@ -137,8 +137,8 @@ setup: --- "search index prefixes with multiple value": - skip: - version: " - 2.11.99" - reason: "the position_increment_gap was fixed in 2.12" + version: " - 2.99.99" + reason: "the position_increment_gap was fixed in 3.0.0" - do: search: rest_total_hits_as_int: true @@ -153,8 +153,8 @@ setup: --- "search index prefixes with multiple value and custom position_increment_gap": - skip: - version: " - 2.11.99" - reason: "the position_increment_gap was fixed in 2.12" + version: " - 2.99.99" + reason: "the position_increment_gap was fixed in 3.0.0" - do: search: rest_total_hits_as_int: true diff --git a/server/src/test/java/org/opensearch/index/mapper/TextFieldTypeTests.java b/server/src/test/java/org/opensearch/index/mapper/TextFieldTypeTests.java index 9c177bbec61fd..e672f94819541 100644 --- a/server/src/test/java/org/opensearch/index/mapper/TextFieldTypeTests.java +++ b/server/src/test/java/org/opensearch/index/mapper/TextFieldTypeTests.java @@ -167,6 +167,7 @@ public void testFuzzyQuery() { public void testIndexPrefixes() { TextFieldType ft = createFieldType(true); + ft.setIndexAnalyzer(Lucene.STANDARD_ANALYZER); ft.setPrefixFieldType(new TextFieldMapper.PrefixFieldType(ft, "field._index_prefix", 2, 10)); Query q = ft.prefixQuery("goin", CONSTANT_SCORE_REWRITE, false, randomMockShardContext()); From 349a4069d7400d7347c17b0f04e684a5225942dd Mon Sep 17 00:00:00 2001 From: Gao Binlong Date: Mon, 15 Apr 2024 14:51:21 +0800 Subject: [PATCH 09/10] Modify yaml test description Signed-off-by: Gao Binlong --- .../test/search/190_index_prefix_search.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/search/190_index_prefix_search.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/search/190_index_prefix_search.yml index 92ff605a3e2d2..8b031c132f979 100644 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/search/190_index_prefix_search.yml +++ b/rest-api-spec/src/main/resources/rest-api-spec/test/search/190_index_prefix_search.yml @@ -134,11 +134,12 @@ setup: - match: {hits.total: 1} +# related issue: https://github.com/opensearch-project/OpenSearch/issues/9203 --- -"search index prefixes with multiple value": +"search index prefixes with multiple values": - skip: version: " - 2.99.99" - reason: "the position_increment_gap was fixed in 3.0.0" + reason: "the bug was fixed in 3.0.0" - do: search: rest_total_hits_as_int: true @@ -151,10 +152,10 @@ setup: - match: {hits.total: 1} --- -"search index prefixes with multiple value and custom position_increment_gap": +"search index prefixes with multiple values and custom position_increment_gap": - skip: version: " - 2.99.99" - reason: "the position_increment_gap was fixed in 3.0.0" + reason: "the bug was fixed in 3.0.0" - do: search: rest_total_hits_as_int: true From c704c97f40e24b22f2f5fe0eddf39a7f9038ea83 Mon Sep 17 00:00:00 2001 From: Gao Binlong Date: Wed, 19 Jun 2024 22:44:45 +0800 Subject: [PATCH 10/10] Remove the name parameter for setAnalyzer() Signed-off-by: Gao Binlong --- .../org/opensearch/index/mapper/TextFieldMapper.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/server/src/main/java/org/opensearch/index/mapper/TextFieldMapper.java b/server/src/main/java/org/opensearch/index/mapper/TextFieldMapper.java index 10363e8f36abd..ba053a3aeee1d 100644 --- a/server/src/main/java/org/opensearch/index/mapper/TextFieldMapper.java +++ b/server/src/main/java/org/opensearch/index/mapper/TextFieldMapper.java @@ -605,7 +605,7 @@ static final class PrefixFieldType extends StringFieldType { this.minChars = minChars; this.maxChars = maxChars; this.parent = parent; - setAnalyzer(parent.indexAnalyzer().name(), parent.indexAnalyzer()); + setAnalyzer(parent.indexAnalyzer()); } @Override @@ -615,12 +615,13 @@ public ValueFetcher valueFetcher(QueryShardContext context, SearchLookup searchL return SourceValueFetcher.toString(name(), context, format); } - void setAnalyzer(String name, NamedAnalyzer delegate) { + void setAnalyzer(NamedAnalyzer delegate) { + String analyzerName = delegate.name(); setIndexAnalyzer( new NamedAnalyzer( - name, + analyzerName, AnalyzerScope.INDEX, - new PrefixWrappedAnalyzer(delegate.analyzer(), minChars, maxChars, delegate.getPositionIncrementGap(name)) + new PrefixWrappedAnalyzer(delegate.analyzer(), minChars, maxChars, delegate.getPositionIncrementGap(analyzerName)) ) ); }