Skip to content

Commit 4701749

Browse files
committed
Merge branch 'fix/master-multi-term-rewrite'
2 parents af36fbc + 7f07d07 commit 4701749

29 files changed

+364
-172
lines changed

docs/query-dsl/compound/full-text/match/match-usage.asciidoc

+3-3
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ q
3131
.FuzzyTranspositions()
3232
.MinimumShouldMatch(2)
3333
.Operator(Operator.Or)
34-
.FuzzyRewrite(RewriteMultiTerm.ConstantScoreBoolean)
34+
.FuzzyRewrite(MultiTermQueryRewrite.TopTermsBlendedFreqs(10))
3535
.Name("named_query")
3636
)
3737
----
@@ -51,7 +51,7 @@ new MatchQuery
5151
Fuzziness = Fuzziness.Auto,
5252
FuzzyTranspositions = true,
5353
MinimumShouldMatch = 2,
54-
FuzzyRewrite = RewriteMultiTerm.ConstantScoreBoolean,
54+
FuzzyRewrite = MultiTermQueryRewrite.TopTermsBlendedFreqs(10),
5555
Lenient = true,
5656
Operator = Operator.Or,
5757
}
@@ -67,7 +67,7 @@ new MatchQuery
6767
"boost": 1.1,
6868
"query": "hello world",
6969
"analyzer": "standard",
70-
"fuzzy_rewrite": "constant_score_boolean",
70+
"fuzzy_rewrite": "top_terms_blended_freqs_10",
7171
"fuzziness": "AUTO",
7272
"fuzzy_transpositions": true,
7373
"cutoff_frequency": 0.001,

docs/query-dsl/compound/full-text/multi-match/multi-match-usage.asciidoc

+2-2
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ q
3131
.MaxExpansions(2)
3232
.Operator(Operator.Or)
3333
.MinimumShouldMatch(2)
34-
.FuzzyRewrite(RewriteMultiTerm.ConstantScoreBoolean)
34+
.FuzzyRewrite(MultiTermQueryRewrite.ConstantScoreBoolean)
3535
.TieBreaker(1.1)
3636
.CutoffFrequency(0.001)
3737
.Lenient()
@@ -56,7 +56,7 @@ new MultiMatchQuery
5656
MaxExpansions = 2,
5757
Operator = Operator.Or,
5858
MinimumShouldMatch = 2,
59-
FuzzyRewrite = RewriteMultiTerm.ConstantScoreBoolean,
59+
FuzzyRewrite = MultiTermQueryRewrite.ConstantScoreBoolean,
6060
TieBreaker = 1.1,
6161
CutoffFrequency = 0.001,
6262
Lenient = true,

docs/query-dsl/compound/full-text/query-string/query-string-usage.asciidoc

+4-4
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ q
3838
.UseDisMax()
3939
.FuzzyPrefixLength(2)
4040
.FuzzyMaxExpansions(3)
41-
.FuzzyRewrite(RewriteMultiTerm.ConstantScore)
42-
.Rewrite(RewriteMultiTerm.ConstantScore)
41+
.FuzzyRewrite(MultiTermQueryRewrite.ConstantScore)
42+
.Rewrite(MultiTermQueryRewrite.ConstantScore)
4343
.Fuzziness(Fuzziness.Auto)
4444
.TieBreaker(1.2)
4545
.AnalyzeWildcard()
@@ -74,8 +74,8 @@ new QueryStringQuery
7474
UseDisMax = true,
7575
FuzzyPrefixLength = 2,
7676
FuzzyMaxExpansions = 3,
77-
FuzzyRewrite = RewriteMultiTerm.ConstantScore,
78-
Rewrite = RewriteMultiTerm.ConstantScore,
77+
FuzzyRewrite = MultiTermQueryRewrite.ConstantScore,
78+
Rewrite = MultiTermQueryRewrite.ConstantScore,
7979
Fuzziness = Fuzziness.Auto,
8080
TieBreaker = 1.2,
8181
AnalyzeWildcard = true,

docs/query-dsl/term-level/fuzzy/fuzzy-date-query-usage.asciidoc

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ q
2828
.Value(Project.Instance.StartedOn)
2929
.MaxExpansions(100)
3030
.PrefixLength(3)
31-
.Rewrite(RewriteMultiTerm.ConstantScore)
31+
.Rewrite(MultiTermQueryRewrite.ConstantScore)
3232
.Transpositions()
3333
)
3434
----
@@ -46,7 +46,7 @@ new FuzzyDateQuery
4646
Value = Project.Instance.StartedOn,
4747
MaxExpansions = 100,
4848
PrefixLength = 3,
49-
Rewrite = RewriteMultiTerm.ConstantScore,
49+
Rewrite = MultiTermQueryRewrite.ConstantScore,
5050
Transpositions = true
5151
}
5252
----

docs/query-dsl/term-level/fuzzy/fuzzy-numeric-query-usage.asciidoc

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ q
2828
.Value(12)
2929
.MaxExpansions(100)
3030
.PrefixLength(3)
31-
.Rewrite(RewriteMultiTerm.ConstantScore)
31+
.Rewrite(MultiTermQueryRewrite.ConstantScore)
3232
.Transpositions()
3333
)
3434
----
@@ -46,7 +46,7 @@ new FuzzyNumericQuery
4646
Value = 12,
4747
MaxExpansions = 100,
4848
PrefixLength = 3,
49-
Rewrite = RewriteMultiTerm.ConstantScore,
49+
Rewrite = MultiTermQueryRewrite.ConstantScore,
5050
Transpositions = true
5151
}
5252
----

docs/query-dsl/term-level/fuzzy/fuzzy-query-usage.asciidoc

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ q
2828
.Value("ki")
2929
.MaxExpansions(100)
3030
.PrefixLength(3)
31-
.Rewrite(RewriteMultiTerm.ConstantScore)
31+
.Rewrite(MultiTermQueryRewrite.ConstantScore)
3232
.Transpositions()
3333
)
3434
----
@@ -46,7 +46,7 @@ new FuzzyQuery
4646
Value = "ki",
4747
MaxExpansions = 100,
4848
PrefixLength = 3,
49-
Rewrite = RewriteMultiTerm.ConstantScore,
49+
Rewrite = MultiTermQueryRewrite.ConstantScore,
5050
Transpositions = true
5151
}
5252
----

docs/query-dsl/term-level/prefix/prefix-query-usage.asciidoc

+3-3
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ q
2525
.Boost(1.1)
2626
.Field(p => p.Description)
2727
.Value("proj")
28-
.Rewrite(RewriteMultiTerm.TopTermsBoostN)
28+
.Rewrite(MultiTermQueryRewrite.TopTerms(10))
2929
)
3030
----
3131

@@ -39,7 +39,7 @@ new PrefixQuery
3939
Boost = 1.1,
4040
Field = "description",
4141
Value = "proj",
42-
Rewrite = RewriteMultiTerm.TopTermsBoostN
42+
Rewrite = MultiTermQueryRewrite.TopTerms(10)
4343
}
4444
----
4545

@@ -51,7 +51,7 @@ new PrefixQuery
5151
"description": {
5252
"_name": "named_query",
5353
"boost": 1.1,
54-
"rewrite": "top_terms_boost_N",
54+
"rewrite": "top_terms_10",
5555
"value": "proj"
5656
}
5757
}

docs/query-dsl/term-level/wildcard/wildcard-query-usage.asciidoc

+3-3
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ q
2525
.Boost(1.1)
2626
.Field(p => p.Description)
2727
.Value("p*oj")
28-
.Rewrite(RewriteMultiTerm.TopTermsBoostN)
28+
.Rewrite(MultiTermQueryRewrite.TopTermsBoost(10))
2929
)
3030
----
3131

@@ -39,7 +39,7 @@ new WildcardQuery
3939
Boost = 1.1,
4040
Field = "description",
4141
Value = "p*oj",
42-
Rewrite = RewriteMultiTerm.TopTermsBoostN
42+
Rewrite = MultiTermQueryRewrite.TopTermsBoost(10)
4343
}
4444
----
4545

@@ -51,7 +51,7 @@ new WildcardQuery
5151
"description": {
5252
"_name": "named_query",
5353
"boost": 1.1,
54-
"rewrite": "top_terms_boost_N",
54+
"rewrite": "top_terms_boost_10",
5555
"value": "p*oj"
5656
}
5757
}

src/Nest/CommonAbstractions/Extensions/Extensions.cs

+17
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,23 @@ internal static IEnumerable<T> DistinctBy<T, TKey>(this IEnumerable<T> items, Fu
5656
}
5757

5858
internal static ConcurrentDictionary<string, object> _enumCache = new ConcurrentDictionary<string, object>();
59+
60+
internal static string ToEnumValue<T>(this T enumValue) where T : struct
61+
{
62+
var enumType = typeof(T);
63+
var name = Enum.GetName(enumType, enumValue);
64+
var enumMemberAttribute = enumType.GetField(name).GetCustomAttribute<EnumMemberAttribute>();
65+
66+
if (enumMemberAttribute != null)
67+
return enumMemberAttribute.Value;
68+
69+
var alternativeEnumMemberAttribute = enumType.GetField(name).GetCustomAttribute<AlternativeEnumMemberAttribute>();
70+
71+
return alternativeEnumMemberAttribute != null
72+
? alternativeEnumMemberAttribute.Value
73+
: enumValue.ToString();
74+
}
75+
5976
internal static T? ToEnum<T>(this string str, StringComparison comparison = StringComparison.OrdinalIgnoreCase) where T : struct
6077
{
6178
if (str == null) return null;

src/Nest/QueryDsl/Abstractions/Container/QueryContainerDescriptor.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@ public QueryContainer Term(Func<TermQueryDescriptor<T>, ITermQuery> selector) =>
348348
/// over many terms. In order to prevent extremely slow wildcard queries, a wildcard term should
349349
/// not start with one of the wildcards * or ?. The wildcard query maps to Lucene WildcardQuery.
350350
/// </summary>
351-
public QueryContainer Wildcard(Expression<Func<T, object>> field, string value, double? boost = null, RewriteMultiTerm? rewrite = null, string name = null) =>
351+
public QueryContainer Wildcard(Expression<Func<T, object>> field, string value, double? boost = null, MultiTermQueryRewrite rewrite = null, string name = null) =>
352352
this.Wildcard(t => t.Field(field).Value(value).Rewrite(rewrite).Boost(boost).Name(name));
353353

354354
/// <summary>
@@ -358,7 +358,7 @@ public QueryContainer Wildcard(Expression<Func<T, object>> field, string value,
358358
/// In order to prevent extremely slow wildcard queries, a wildcard term should not start with
359359
/// one of the wildcards * or ?. The wildcard query maps to Lucene WildcardQuery.
360360
/// </summary>
361-
public QueryContainer Wildcard(Field field, string value, double? boost = null, RewriteMultiTerm? rewrite = null, string name = null) =>
361+
public QueryContainer Wildcard(Field field, string value, double? boost = null, MultiTermQueryRewrite rewrite = null, string name = null) =>
362362
this.Wildcard(t => t.Field(field).Value(value).Rewrite(rewrite).Boost(boost).Name(name));
363363

364364
/// <summary>
@@ -375,14 +375,14 @@ public QueryContainer Wildcard(Func<WildcardQueryDescriptor<T>, IWildcardQuery>
375375
/// Matches documents that have fields containing terms with a specified prefix (not analyzed).
376376
/// The prefix query maps to Lucene PrefixQuery.
377377
/// </summary>
378-
public QueryContainer Prefix(Expression<Func<T, object>> field, string value, double? boost = null, RewriteMultiTerm? rewrite = null, string name = null) =>
378+
public QueryContainer Prefix(Expression<Func<T, object>> field, string value, double? boost = null, MultiTermQueryRewrite rewrite = null, string name = null) =>
379379
this.Prefix(t => t.Field(field).Value(value).Boost(boost).Rewrite(rewrite).Name(name));
380380

381381
/// <summary>
382382
/// Matches documents that have fields containing terms with a specified prefix (not analyzed).
383383
/// The prefix query maps to Lucene PrefixQuery.
384384
/// </summary>
385-
public QueryContainer Prefix(Field field, string value, double? boost = null, RewriteMultiTerm? rewrite = null, string name = null) =>
385+
public QueryContainer Prefix(Field field, string value, double? boost = null, MultiTermQueryRewrite rewrite = null, string name = null) =>
386386
this.Prefix(t => t.Field(field).Value(value).Boost(boost).Rewrite(rewrite).Name(name));
387387

388388
/// <summary>

src/Nest/QueryDsl/FullText/Match/MatchQuery.cs

+13-15
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,39 @@
11
using Newtonsoft.Json;
2-
using Newtonsoft.Json.Converters;
32

43
namespace Nest
54
{
65
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
76
[JsonConverter(typeof(FieldNameQueryJsonConverter<MatchQuery>))]
87
public interface IMatchQuery : IFieldNameQuery
98
{
10-
[JsonProperty(PropertyName = "query")]
9+
[JsonProperty("query")]
1110
string Query { get; set; }
1211

13-
[JsonProperty(PropertyName = "analyzer")]
12+
[JsonProperty("analyzer")]
1413
string Analyzer { get; set; }
1514

16-
[JsonProperty(PropertyName = "fuzzy_rewrite")]
17-
[JsonConverter(typeof (StringEnumConverter))]
18-
RewriteMultiTerm? FuzzyRewrite { get; set; }
15+
[JsonProperty("fuzzy_rewrite")]
16+
MultiTermQueryRewrite FuzzyRewrite { get; set; }
1917

20-
[JsonProperty(PropertyName = "fuzziness")]
18+
[JsonProperty("fuzziness")]
2119
IFuzziness Fuzziness { get; set; }
2220

23-
[JsonProperty(PropertyName = "fuzzy_transpositions")]
21+
[JsonProperty("fuzzy_transpositions")]
2422
bool? FuzzyTranspositions { get; set; }
2523

26-
[JsonProperty(PropertyName = "cutoff_frequency")]
24+
[JsonProperty("cutoff_frequency")]
2725
double? CutoffFrequency { get; set; }
2826

29-
[JsonProperty(PropertyName = "lenient")]
27+
[JsonProperty("lenient")]
3028
bool? Lenient { get; set; }
3129

3230
[JsonProperty("minimum_should_match")]
3331
MinimumShouldMatch MinimumShouldMatch { get; set; }
3432

35-
[JsonProperty(PropertyName = "operator")]
33+
[JsonProperty("operator")]
3634
Operator? Operator { get; set; }
3735

38-
[JsonProperty(PropertyName = "zero_terms_query")]
36+
[JsonProperty("zero_terms_query")]
3937
ZeroTermsQuery? ZeroTermsQuery { get; set; }
4038
}
4139

@@ -45,7 +43,7 @@ public class MatchQuery : FieldNameQueryBase, IMatchQuery
4543

4644
public string Query { get; set; }
4745
public string Analyzer { get; set; }
48-
public RewriteMultiTerm? FuzzyRewrite { get; set; }
46+
public MultiTermQueryRewrite FuzzyRewrite { get; set; }
4947
public IFuzziness Fuzziness { get; set; }
5048
public bool? FuzzyTranspositions { get; set; }
5149
public double? CutoffFrequency { get; set; }
@@ -69,7 +67,7 @@ public class MatchQueryDescriptor<T>
6967
string IMatchQuery.Query { get; set; }
7068
string IMatchQuery.Analyzer { get; set; }
7169
MinimumShouldMatch IMatchQuery.MinimumShouldMatch { get; set; }
72-
RewriteMultiTerm? IMatchQuery.FuzzyRewrite { get; set; }
70+
MultiTermQueryRewrite IMatchQuery.FuzzyRewrite { get; set; }
7371
IFuzziness IMatchQuery.Fuzziness { get; set; }
7472
bool? IMatchQuery.FuzzyTranspositions { get; set; }
7573
double? IMatchQuery.CutoffFrequency { get; set; }
@@ -89,7 +87,7 @@ public class MatchQueryDescriptor<T>
8987

9088
public MatchQueryDescriptor<T> CutoffFrequency(double? cutoffFrequency) => Assign(a => a.CutoffFrequency = cutoffFrequency);
9189

92-
public MatchQueryDescriptor<T> FuzzyRewrite(RewriteMultiTerm? rewrite) => Assign(a => a.FuzzyRewrite = rewrite);
90+
public MatchQueryDescriptor<T> FuzzyRewrite(MultiTermQueryRewrite rewrite) => Assign(a => Self.FuzzyRewrite = rewrite);
9391

9492
public MatchQueryDescriptor<T> MinimumShouldMatch(MinimumShouldMatch minimumShouldMatch) => Assign(a => a.MinimumShouldMatch = minimumShouldMatch);
9593

src/Nest/QueryDsl/FullText/MultiMatch/MultiMatchQuery.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public interface IMultiMatchQuery : IQuery
1818
string Analyzer { get; set; }
1919

2020
[JsonProperty("fuzzy_rewrite")]
21-
RewriteMultiTerm? FuzzyRewrite { get; set; }
21+
MultiTermQueryRewrite FuzzyRewrite { get; set; }
2222

2323
/// <summary>
2424
/// Allows fuzzy matching based on the type of field being queried.
@@ -70,7 +70,7 @@ public class MultiMatchQuery : QueryBase, IMultiMatchQuery
7070
public TextQueryType? Type { get; set; }
7171
public string Query { get; set; }
7272
public string Analyzer { get; set; }
73-
public RewriteMultiTerm? FuzzyRewrite { get; set; }
73+
public MultiTermQueryRewrite FuzzyRewrite { get; set; }
7474

7575
/// <summary>
7676
/// Allows fuzzy matching based on the type of field being queried.
@@ -106,7 +106,7 @@ public class MultiMatchQueryDescriptor<T>
106106
TextQueryType? IMultiMatchQuery.Type { get; set; }
107107
string IMultiMatchQuery.Query { get; set; }
108108
string IMultiMatchQuery.Analyzer { get; set; }
109-
RewriteMultiTerm? IMultiMatchQuery.FuzzyRewrite { get; set; }
109+
MultiTermQueryRewrite IMultiMatchQuery.FuzzyRewrite { get; set; }
110110
Fuzziness IMultiMatchQuery.Fuzziness { get; set; }
111111
double? IMultiMatchQuery.CutoffFrequency { get; set; }
112112
int? IMultiMatchQuery.PrefixLength { get; set; }
@@ -144,7 +144,7 @@ public MultiMatchQueryDescriptor<T> CutoffFrequency(double cutoffFrequency)
144144
public MultiMatchQueryDescriptor<T> MinimumShouldMatch(MinimumShouldMatch minimumShouldMatch)
145145
=> Assign(a => a.MinimumShouldMatch = minimumShouldMatch);
146146

147-
public MultiMatchQueryDescriptor<T> FuzzyRewrite(RewriteMultiTerm rewrite) => Assign(a => a.FuzzyRewrite = rewrite);
147+
public MultiMatchQueryDescriptor<T> FuzzyRewrite(MultiTermQueryRewrite rewrite) => Assign(a => Self.FuzzyRewrite = rewrite);
148148

149149
public MultiMatchQueryDescriptor<T> Lenient(bool? lenient = true) => Assign(a => a.Lenient = lenient);
150150

0 commit comments

Comments
 (0)