From a3e732793d544e0058f8633ce116213eeafd9a83 Mon Sep 17 00:00:00 2001 From: Alan Woodward Date: Wed, 3 Apr 2019 15:09:25 +0100 Subject: [PATCH 1/2] Document restrictions on fuzzy matching when using synonyms Relates to #25518 --- docs/reference/query-dsl/match-query.asciidoc | 4 ++++ .../index/query/MatchQueryBuilderTests.java | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/docs/reference/query-dsl/match-query.asciidoc b/docs/reference/query-dsl/match-query.asciidoc index 64c356ccaa80c..89a0a942b79ce 100644 --- a/docs/reference/query-dsl/match-query.asciidoc +++ b/docs/reference/query-dsl/match-query.asciidoc @@ -75,6 +75,10 @@ rewritten. Fuzzy transpositions (`ab` -> `ba`) are allowed by default but can be disabled by setting `fuzzy_transpositions` to `false`. +Note that fuzzy matching is not applied to terms with synonyms, as under the hood +these terms are expanded to a special synonym query that blends term frequencies, +which does not support fuzzy expansion. + [source,js] -------------------------------------------------- GET /_search diff --git a/server/src/test/java/org/elasticsearch/index/query/MatchQueryBuilderTests.java b/server/src/test/java/org/elasticsearch/index/query/MatchQueryBuilderTests.java index e9f2b447da133..d91593d1b724f 100644 --- a/server/src/test/java/org/elasticsearch/index/query/MatchQueryBuilderTests.java +++ b/server/src/test/java/org/elasticsearch/index/query/MatchQueryBuilderTests.java @@ -40,6 +40,7 @@ import org.elasticsearch.common.compress.CompressedXContent; import org.elasticsearch.common.lucene.search.MultiPhrasePrefixQuery; import org.elasticsearch.common.lucene.search.Queries; +import org.elasticsearch.common.unit.Fuzziness; import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.index.mapper.MapperService; import org.elasticsearch.index.search.MatchQuery; @@ -300,6 +301,14 @@ public void testFuzzinessOnNonStringField() throws Exception { query.toQuery(context); // no exception } + public void testFuzziness() throws Exception { + MatchQueryBuilder query = new MatchQueryBuilder(STRING_FIELD_NAME, "this is a testt"); + query.fuzziness(Fuzziness.TWO); + QueryShardContext context = createShardContext(); + Query q = query.toQuery(context); + System.out.println(q); + } + public void testExactOnUnsupportedField() throws Exception { MatchQueryBuilder query = new MatchQueryBuilder(GEO_POINT_FIELD_NAME, "2,3"); QueryShardContext context = createShardContext(); From 1f81bce5b18a7d3f9af50df3e1cc18bcc0896ea8 Mon Sep 17 00:00:00 2001 From: Alan Woodward Date: Wed, 3 Apr 2019 15:46:11 +0100 Subject: [PATCH 2/2] remove leftover test --- .../index/query/MatchQueryBuilderTests.java | 9 --------- 1 file changed, 9 deletions(-) diff --git a/server/src/test/java/org/elasticsearch/index/query/MatchQueryBuilderTests.java b/server/src/test/java/org/elasticsearch/index/query/MatchQueryBuilderTests.java index d91593d1b724f..e9f2b447da133 100644 --- a/server/src/test/java/org/elasticsearch/index/query/MatchQueryBuilderTests.java +++ b/server/src/test/java/org/elasticsearch/index/query/MatchQueryBuilderTests.java @@ -40,7 +40,6 @@ import org.elasticsearch.common.compress.CompressedXContent; import org.elasticsearch.common.lucene.search.MultiPhrasePrefixQuery; import org.elasticsearch.common.lucene.search.Queries; -import org.elasticsearch.common.unit.Fuzziness; import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.index.mapper.MapperService; import org.elasticsearch.index.search.MatchQuery; @@ -301,14 +300,6 @@ public void testFuzzinessOnNonStringField() throws Exception { query.toQuery(context); // no exception } - public void testFuzziness() throws Exception { - MatchQueryBuilder query = new MatchQueryBuilder(STRING_FIELD_NAME, "this is a testt"); - query.fuzziness(Fuzziness.TWO); - QueryShardContext context = createShardContext(); - Query q = query.toQuery(context); - System.out.println(q); - } - public void testExactOnUnsupportedField() throws Exception { MatchQueryBuilder query = new MatchQueryBuilder(GEO_POINT_FIELD_NAME, "2,3"); QueryShardContext context = createShardContext();