Skip to content

Commit b38d3a3

Browse files
committed
added exists and better fuzzy query constructs
1 parent 3f42c40 commit b38d3a3

File tree

15 files changed

+404
-139
lines changed

15 files changed

+404
-139
lines changed

src/CodeGeneration/CodeGeneration.LowLevelClient/App.config

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
<startup>
44
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
55
</startup>
6-
</configuration>
6+
<runtime><assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" /></runtime></configuration>

src/CodeGeneration/Nest.Litterateur/App.config

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@
55
</startup>
66

77
<runtime>
8-
</runtime></configuration>
8+
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" /></runtime></configuration>

src/Nest/Nest.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,7 @@
378378
<Compile Include="Analysis\Tokenizers\UaxEmailUrlTokenizer.cs" />
379379
<Compile Include="Analysis\Tokenizers\WhitespaceTokenizer.cs" />
380380
<Compile Include="CommonOptions\Failures\ShardsFailure.cs" />
381+
<Compile Include="QueryDsl\TermLevel\Fuzzy\FuzzyQueries.cs" />
381382
<Compile Include="QueryDsl\VariableFieldNameQueryJsonConverter.cs" />
382383
<Compile Include="Search\CovariantSearch.cs" />
383384
<Compile Include="Search\MultiSearch\MultiSearchResponsJsonConverter.cs" />
@@ -936,7 +937,7 @@
936937
<Compile Include="QueryDsl\Span\SpanQuery.cs" />
937938
<Compile Include="QueryDsl\Span\Term\SpanTermQuery.cs" />
938939
<Compile Include="QueryDsl\Specialized\MoreLikeThis\MoreLikeThisQuery.cs" />
939-
<Compile Include="QueryDsl\TermLevel\Fuzzy\FuzzyQuery.cs" />
940+
<Compile Include="QueryDsl\TermLevel\Fuzzy\FuzzyQueryBase.cs" />
940941
<Compile Include="QueryDsl\Joining\HasChild\HasChildQuery.cs" />
941942
<Compile Include="QueryDsl\TermLevel\Range\RangeQuery.cs" />
942943
<Compile Include="QueryDsl\Compound\Dismax\DismaxQuery.cs" />
@@ -1102,7 +1103,6 @@
11021103
<ItemGroup>
11031104
<None Include="paket.references" />
11041105
</ItemGroup>
1105-
<ItemGroup />
11061106
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
11071107
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
11081108
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.

src/Nest/QueryDsl/QueryContainerDescriptor.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,12 @@ public QueryContainer Terms<K>(Func<TermsQueryDescriptor<T, K>, ITermsQuery> sel
117117
public QueryContainer Fuzzy(Func<FuzzyQueryDescriptor<T>, IFuzzyQuery> selector) =>
118118
this._assignSelector(selector, (query, container) => container.Fuzzy = query);
119119

120+
public QueryContainer FuzzyNumeric(Func<FuzzyNumericQueryDescriptor<T>, IFuzzyQuery> selector) =>
121+
this._assignSelector(selector, (query, container) => container.Fuzzy = query);
122+
123+
public QueryContainer FuzzyDate(Func<FuzzyDateQueryDescriptor<T>, IFuzzyQuery> selector) =>
124+
this._assignSelector(selector, (query, container) => container.Fuzzy = query);
125+
120126
/// <summary>
121127
/// The default text query is of type boolean. It means that the text provided is analyzed and the analysis
122128
/// process constructs a boolean query from the provided text.
@@ -595,5 +601,8 @@ public QueryContainer Template(Func<TemplateQueryDescriptor<T>, ITemplateQuery>
595601
public QueryContainer Script(Func<ScriptQueryDescriptor<T>, IScriptQuery> selector) =>
596602
this._assignSelector(selector, (query, container) => container.Script = query);
597603

604+
public QueryContainer Exists(Func<ExistsQueryDescriptor<T>, IExistsQuery> selector) =>
605+
this._assignSelector(selector, (query, container) => container.Exists = query);
606+
598607
}
599608
}

src/Nest/QueryDsl/TermLevel/Exists/ExistsQuery.cs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,33 @@
66

77
namespace Nest
88
{
9-
[JsonConverter(typeof(ReadAsTypeJsonConverter<ExistsQuery>))]
109
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
11-
public interface IExistsQuery : IFieldNameQuery
10+
[JsonConverter(typeof(ReadAsTypeJsonConverter<ExistsQuery>))]
11+
public interface IExistsQuery : IQuery
1212
{
13+
[JsonProperty("field")]
14+
Field Field { get; set; }
1315
}
1416

15-
public class ExistsQuery : FieldNameQueryBase, IExistsQuery
17+
public class ExistsQuery : QueryBase, IExistsQuery
1618
{
19+
public Field Field { get; set; }
1720
bool IQuery.Conditionless => IsConditionless(this);
1821

1922
protected override void WrapInContainer(IQueryContainer c) => c.Exists = this;
2023
internal static bool IsConditionless(IExistsQuery q) => q.Field.IsConditionless();
2124
}
2225

2326
public class ExistsQueryDescriptor<T>
24-
: FieldNameQueryDescriptorBase<ExistsQueryDescriptor<T>, IExistsQuery, T>
27+
: QueryDescriptorBase<ExistsQueryDescriptor<T>, IExistsQuery>
2528
, IExistsQuery where T : class
2629
{
2730
bool IQuery.Conditionless => ExistsQuery.IsConditionless(this);
31+
32+
Field IExistsQuery.Field { get; set; }
33+
34+
public ExistsQueryDescriptor<T> Field(Field field) => Assign(a => a.Field = field);
35+
public ExistsQueryDescriptor<T> Field(Expression<Func<T, object>> objectPath) => Assign(a => a.Field = objectPath);
36+
2837
}
2938
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
using System;
2+
using Newtonsoft.Json;
3+
using System.Linq.Expressions;
4+
using System.Globalization;
5+
6+
namespace Nest
7+
{
8+
public class FuzzyQuery : FuzzyQueryBase<string, Fuzziness>
9+
{
10+
}
11+
12+
public class FuzzyQueryDescriptor<T>
13+
: FuzzyQueryDescriptorBase<FuzzyQueryDescriptor<T>, T, string, Fuzziness>
14+
, IFuzzyQuery where T : class
15+
{
16+
public FuzzyQueryDescriptor<T> Fuzziness(Fuzziness fuzziness) => Assign(a => this._Fuzziness = fuzziness);
17+
18+
public FuzzyQueryDescriptor<T> Value(string value) => Assign(a => this._Value = value);
19+
}
20+
21+
public class FuzzyNumericQuery : FuzzyQueryBase<double?, double?>
22+
{
23+
}
24+
25+
public class FuzzyNumericQueryDescriptor<T>
26+
: FuzzyQueryDescriptorBase<FuzzyNumericQueryDescriptor<T>, T, double?, double?>
27+
, IFuzzyQuery where T : class
28+
{
29+
public FuzzyNumericQueryDescriptor<T> Fuzziness(double? fuzziness) => Assign(a => this._Fuzziness = fuzziness);
30+
31+
public FuzzyNumericQueryDescriptor<T> Value(double? value) => Assign(a => this._Value = value);
32+
}
33+
34+
public class FuzzyDateQuery : FuzzyQueryBase<DateTime?, TimeUnitExpression>
35+
{
36+
}
37+
38+
public class FuzzyDateQueryDescriptor<T>
39+
: FuzzyQueryDescriptorBase<FuzzyDateQueryDescriptor<T>, T, DateTime?, TimeUnitExpression>
40+
, IFuzzyQuery where T : class
41+
{
42+
public FuzzyDateQueryDescriptor<T> Fuzziness(TimeUnitExpression fuzziness) => Assign(a => this._Fuzziness = fuzziness);
43+
44+
public FuzzyDateQueryDescriptor<T> Value(DateTime? value) => Assign(a => this._Value = value);
45+
}
46+
}

src/Nest/QueryDsl/TermLevel/Fuzzy/FuzzyQuery.cs

Lines changed: 0 additions & 82 deletions
This file was deleted.
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
using System;
2+
using Newtonsoft.Json;
3+
using System.Linq.Expressions;
4+
using System.Globalization;
5+
6+
namespace Nest
7+
{
8+
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
9+
[JsonConverter(typeof(FuzzyQueryJsonConverter))]
10+
public interface IFuzzyQuery : IFieldNameQuery
11+
{
12+
[JsonProperty(PropertyName = "prefix_length")]
13+
int? PrefixLength { get; set; }
14+
15+
[JsonProperty(PropertyName = "rewrite")]
16+
RewriteMultiTerm? Rewrite { get; set; }
17+
18+
[JsonProperty(PropertyName = "max_expansions")]
19+
int? MaxExpansions { get; set; }
20+
21+
[JsonProperty(PropertyName = "transpositions")]
22+
bool? Transpositions { get; set; }
23+
}
24+
public abstract class FuzzyQueryBase<TValue, TFuzziness> : FieldNameQueryBase, IFuzzyQuery
25+
{
26+
[JsonProperty(PropertyName = "prefix_length")]
27+
public int? PrefixLength { get; set; }
28+
29+
[JsonProperty(PropertyName = "value")]
30+
public TValue Value { get; set; }
31+
32+
[JsonProperty(PropertyName = "fuzziness")]
33+
public TFuzziness Fuzziness { get; set; }
34+
35+
[JsonProperty(PropertyName = "rewrite")]
36+
public RewriteMultiTerm? Rewrite { get; set; }
37+
38+
[JsonProperty(PropertyName = "max_expansions")]
39+
public int? MaxExpansions { get; set; }
40+
41+
[JsonProperty(PropertyName = "transpositions")]
42+
public bool? Transpositions { get; set; }
43+
44+
protected override void WrapInContainer(IQueryContainer c) => c.Fuzzy = this;
45+
}
46+
47+
public class FuzzyQueryDescriptorBase<TDescriptor, T, TValue, TFuzziness>
48+
: FieldNameQueryDescriptorBase<TDescriptor, IFuzzyQuery, T> , IFuzzyQuery
49+
where T : class
50+
where TDescriptor : FieldNameQueryDescriptorBase<TDescriptor, IFuzzyQuery, T>, IFuzzyQuery
51+
{
52+
int? IFuzzyQuery.PrefixLength { get; set; }
53+
int? IFuzzyQuery.MaxExpansions { get; set; }
54+
bool? IFuzzyQuery.Transpositions { get; set; }
55+
RewriteMultiTerm? IFuzzyQuery.Rewrite { get; set; }
56+
57+
[JsonProperty(PropertyName = "fuzziness")]
58+
internal TFuzziness _Fuzziness { get; set; }
59+
60+
[JsonProperty(PropertyName = "value")]
61+
internal TValue _Value { get; set; }
62+
63+
public TDescriptor MaxExpansions(int? maxExpansions) => Assign(a => a.MaxExpansions = maxExpansions);
64+
65+
public TDescriptor PrefixLength(int? prefixLength) => Assign(a => a.PrefixLength = prefixLength);
66+
67+
public TDescriptor Transpositions(bool? enable = true) => Assign(a => a.Transpositions = enable);
68+
69+
public TDescriptor Rewrite(RewriteMultiTerm? rewrite) => Assign(a => a.Rewrite = rewrite);
70+
71+
}
72+
}

0 commit comments

Comments
 (0)