Skip to content

Commit d95df6d

Browse files
committed
Missing fuzzy_transpositions support in MatchQuery #1333
1 parent ded5868 commit d95df6d

File tree

4 files changed

+56
-1
lines changed

4 files changed

+56
-1
lines changed

src/Nest/DSL/Query/MatchQueryDescriptor.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ public interface IMatchQuery : IFieldNameQuery
2929
[JsonProperty(PropertyName = "fuzziness")]
3030
double? Fuzziness { get; set; }
3131

32+
[JsonProperty(PropertyName = "fuzzy_transpositions")]
33+
bool? FuzzyTranspositions { get; set; }
34+
3235
[JsonProperty(PropertyName = "cutoff_frequency")]
3336
double? CutoffFrequency { get; set; }
3437

@@ -82,6 +85,7 @@ void IFieldNameQuery.SetFieldName(string fieldName)
8285
public string Analyzer { get; set; }
8386
public RewriteMultiTerm? Rewrite { get; set; }
8487
public double? Fuzziness { get; set; }
88+
public bool? FuzzyTranspositions { get; set; }
8589
public double? CutoffFrequency { get; set; }
8690
public int? PrefixLength { get; set; }
8791
public int? MaxExpansions { get; set; }
@@ -112,6 +116,7 @@ public class MatchQueryDescriptor<T> : IMatchQuery where T : class
112116
RewriteMultiTerm? IMatchQuery.Rewrite { get; set; }
113117

114118
double? IMatchQuery.Fuzziness { get; set; }
119+
bool? IMatchQuery.FuzzyTranspositions { get; set; }
115120

116121
double? IMatchQuery.CutoffFrequency { get; set; }
117122

@@ -187,7 +192,13 @@ public MatchQueryDescriptor<T> Fuzziness(double fuzziness)
187192
Self.Fuzziness = fuzziness;
188193
return this;
189194
}
190-
195+
196+
public MatchQueryDescriptor<T> FuzzyTranspositions(bool fuzzyTranspositions = true)
197+
{
198+
Self.FuzzyTranspositions = fuzzyTranspositions;
199+
return this;
200+
}
201+
191202
public MatchQueryDescriptor<T> CutoffFrequency(double cutoffFrequency)
192203
{
193204
Self.CutoffFrequency = cutoffFrequency;

src/Nest/Resolvers/Converters/Queries/MatchQueryJsonConverter.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
4545
fq.Analyzer = GetPropValue<string>(jo, "analyzer");
4646
fq.CutoffFrequency = GetPropValue<double?>(jo, "cutoff_frequency");
4747
fq.Fuzziness = GetPropValue<double?>(jo, "fuzziness");
48+
fq.FuzzyTranspositions = GetPropValue<bool?>(jo, "fuzzy_transpositions");
4849
fq.Lenient = GetPropValue<bool?>(jo, "lenient");
4950
fq.MaxExpansions = GetPropValue<int?>(jo, "max_expansions");
5051
fq.PrefixLength = GetPropValue<int?>(jo, "prefix_length");

src/Tests/Nest.Tests.Unit/QueryParsers/Queries/MatchQueryTests.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public void Match_Deserializes()
3333
q.Boost.Should().Be(2.1);
3434
q.CutoffFrequency.Should().Be(1.31);
3535
q.Fuzziness.Should().Be(2.3);
36+
q.FuzzyTranspositions.Should().Be(null);
3637
q.Lenient.Should().BeTrue();
3738
q.MaxExpansions.Should().Be(2);
3839
q.Field.Should().Be("name");
@@ -54,6 +55,7 @@ public void MatchPhrasePhrefix_Deserializes()
5455
.Boost(2.1)
5556
.CutoffFrequency(1.31)
5657
.Fuzziness(2.3)
58+
.FuzzyTranspositions(false)
5759
.Lenient()
5860
.MaxExpansions(2)
5961
.Operator(Operator.And)
@@ -68,6 +70,7 @@ public void MatchPhrasePhrefix_Deserializes()
6870
q.Boost.Should().Be(2.1);
6971
q.CutoffFrequency.Should().Be(1.31);
7072
q.Fuzziness.Should().Be(2.3);
73+
q.FuzzyTranspositions.Should().Be(false);
7174
q.Lenient.Should().BeTrue();
7275
q.MaxExpansions.Should().Be(2);
7376
q.Field.Should().Be("name");
@@ -89,6 +92,7 @@ public void MatchPhrase_Deserializes()
8992
.Boost(2.1)
9093
.CutoffFrequency(1.31)
9194
.Fuzziness(2.3)
95+
.FuzzyTranspositions()
9296
.Lenient()
9397
.MaxExpansions(2)
9498
.Operator(Operator.And)
@@ -103,6 +107,7 @@ public void MatchPhrase_Deserializes()
103107
q.Boost.Should().Be(2.1);
104108
q.CutoffFrequency.Should().Be(1.31);
105109
q.Fuzziness.Should().Be(2.3);
110+
q.FuzzyTranspositions.Should().Be(true);
106111
q.Lenient.Should().BeTrue();
107112
q.MaxExpansions.Should().Be(2);
108113
q.Field.Should().Be("name");

src/Tests/Nest.Tests.Unit/Search/Query/Singles/MatchQueryJson.cs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ public void MatchPhraseQuery()
6868
}";
6969
Assert.True(json.JsonEquals(expected), json);
7070
}
71+
7172
[Test]
7273
public void MatchQuerySomeOptions()
7374
{
@@ -104,5 +105,42 @@ public void MatchQuerySomeOptions()
104105
}";
105106
Assert.True(json.JsonEquals(expected), json);
106107
}
108+
[Test]
109+
public void MatchQueryFuzzyTranspositions()
110+
{
111+
var s = new SearchDescriptor<ElasticsearchProject>()
112+
.From(0)
113+
.Size(10)
114+
.Query(q => q
115+
.Match(t => t
116+
.OnField(f => f.Name)
117+
.Query("this is a test")
118+
.Fuzziness(1.0)
119+
.FuzzyTranspositions()
120+
.Analyzer("my_analyzer")
121+
.CutoffFrequency(0.3)
122+
.Rewrite(RewriteMultiTerm.ConstantScoreFilter)
123+
.PrefixLength(2)
124+
)
125+
);
126+
127+
var json = TestElasticClient.Serialize(s);
128+
var expected = @"{ from: 0, size: 10,
129+
query : {
130+
match: {
131+
name : {
132+
query : ""this is a test"",
133+
analyzer : ""my_analyzer"",
134+
rewrite: ""constant_score_filter"",
135+
fuzziness: 1.0,
136+
fuzzy_transpositions : true,
137+
cutoff_frequency: 0.3,
138+
prefix_length: 2
139+
}
140+
}
141+
}
142+
}";
143+
Assert.True(json.JsonEquals(expected), json);
144+
}
107145
}
108146
}

0 commit comments

Comments
 (0)