Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 17 additions & 6 deletions src/Nest/DSL/Query/MatchQueryDescriptor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public interface IMatchQuery : IFieldNameQuery
RewriteMultiTerm? Rewrite { get; set; }

[JsonProperty(PropertyName = "fuzziness")]
double? Fuzziness { get; set; }
IFuzziness Fuzziness { get; set; }

[JsonProperty(PropertyName = "cutoff_frequency")]
double? CutoffFrequency { get; set; }
Expand Down Expand Up @@ -79,7 +79,7 @@ void IFieldNameQuery.SetFieldName(string fieldName)
public string Query { get; set; }
public string Analyzer { get; set; }
public RewriteMultiTerm? Rewrite { get; set; }
public double? Fuzziness { get; set; }
public IFuzziness Fuzziness { get; set; }
public double? CutoffFrequency { get; set; }
public int? PrefixLength { get; set; }
public int? MaxExpansions { get; set; }
Expand Down Expand Up @@ -109,7 +109,7 @@ public class MatchQueryDescriptor<T> : IMatchQuery where T : class

RewriteMultiTerm? IMatchQuery.Rewrite { get; set; }

double? IMatchQuery.Fuzziness { get; set; }
IFuzziness IMatchQuery.Fuzziness { get; set; }

double? IMatchQuery.CutoffFrequency { get; set; }

Expand Down Expand Up @@ -172,10 +172,21 @@ public MatchQueryDescriptor<T> Analyzer(string analyzer)
Self.Analyzer = analyzer;
return this;
}

public MatchQueryDescriptor<T> Fuzziness(double fuzziness)

public MatchQueryDescriptor<T> Fuzziness(double ratio)
{
Self.Fuzziness = Nest.Fuzziness.Ratio(ratio);
return this;
}
public MatchQueryDescriptor<T> Fuzziness()
{
Self.Fuzziness = Nest.Fuzziness.Auto;
return this;
}

public MatchQueryDescriptor<T> Fuzziness(int editDistance)
{
Self.Fuzziness = fuzziness;
Self.Fuzziness = Nest.Fuzziness.EditDistance(editDistance);
return this;
}

Expand Down
4 changes: 2 additions & 2 deletions src/Nest/Resolvers/Converters/FuzzinessConverter.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
using System;
using System.Linq;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace Nest.Resolvers.Converters
{

public class FuzzinessConverter : JsonConverter
{
public override bool CanWrite { get { return true; } }
Expand All @@ -26,7 +26,7 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
return Fuzziness.Auto;
if (reader.TokenType == JsonToken.Integer)
{
var editDistance = (reader.Value as int?).GetValueOrDefault(0);
var editDistance = Convert.ToInt32(reader.Value);
return Fuzziness.EditDistance(editDistance);
}
if (reader.TokenType == JsonToken.Float)
Expand Down
12 changes: 11 additions & 1 deletion src/Nest/Resolvers/Converters/Queries/MatchQueryJsonConverter.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Nest.DSL.Query.Behaviour;
using Nest.Resolvers;
Expand Down Expand Up @@ -44,7 +45,7 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
fq.Boost = GetPropValue<double?>(jo, "boost");
fq.Analyzer = GetPropValue<string>(jo, "analyzer");
fq.CutoffFrequency = GetPropValue<double?>(jo, "cutoff_frequency");
fq.Fuzziness = GetPropValue<double?>(jo, "fuzziness");
fq.Fuzziness = GetFuzziness(jo);
fq.Lenient = GetPropValue<bool?>(jo, "lenient");
fq.MaxExpansions = GetPropValue<int?>(jo, "max_expansions");
fq.PrefixLength = GetPropValue<int?>(jo, "prefix_length");
Expand All @@ -62,6 +63,15 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
return fq;
}

private static IFuzziness GetFuzziness(IDictionary<string, JToken> jObject)
{
JToken jToken;
if (!jObject.TryGetValue("fuzziness", out jToken)) return null;

var tmp = jToken.ToObject<IFuzziness>();
return tmp;
}

public TReturn GetPropValue<TReturn>(JObject jObject, string propertyName)
{
JToken jToken = null;
Expand Down
23 changes: 23 additions & 0 deletions src/Tests/Nest.Tests.Unit/Converters/BaseConverterTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
using System.IO;

namespace Nest.Tests.Unit.Converters
{
public abstract class BaseConverterTest : BaseJsonTests
{
protected T SerializeAndDeserialize<T>(T expected)
{
var json = _client.Serializer.Serialize(expected);

using (var ms = new MemoryStream(json))
{
return _client.Serializer.Deserialize<T>(ms);
}
}

protected class ConverterTestObject
{
public string Name { get; set; }
public IFuzziness Fuzziness { get; set; }
}
}
}
85 changes: 85 additions & 0 deletions src/Tests/Nest.Tests.Unit/Converters/FuzzinessConverterTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
using System.Collections.Generic;
using FluentAssertions;
using Nest.Tests.MockData.Domain;
using NUnit.Framework;

namespace Nest.Tests.Unit.Converters
{
[TestFixture]
public class FuzzinessConverterTests : BaseConverterTest
{
[Test]
public void ItCanConvertMatchFuzziness()
{
var expected = new QueryDescriptor<ElasticsearchProject>().Match(m => m
.OnField("myfield")
.Query("myquery")
.Fuzziness());

var actual = SerializeAndDeserialize<IQueryContainer>(expected);

actual.Match.Fuzziness.EditDistance.Should().Be(null);
actual.Match.Fuzziness.Ratio.Should().Be(null);
actual.Match.Fuzziness.Auto.Should().BeTrue();
}

[Test]
public void ItCanConvertMatchFuzzinessEditDistance()
{
var expected = new QueryDescriptor<ElasticsearchProject>().Match(m => m
.OnField("myfield")
.Query("myquery")
.Fuzziness(2));

var actual = SerializeAndDeserialize<IQueryContainer>(expected);

actual.Match.Fuzziness.EditDistance.Should().Be(2);
actual.Match.Fuzziness.Ratio.Should().Be(null);
actual.Match.Fuzziness.Auto.Should().BeFalse();
}

[Test]
public void ItCanConvertMatchFuzzinessRatio()
{
var expected = new QueryDescriptor<ElasticsearchProject>().Match(m => m
.OnField("myfield")
.Query("myquery")
.Fuzziness(1.3));

var actual = SerializeAndDeserialize<IQueryContainer>(expected);

actual.Match.Fuzziness.EditDistance.Should().Be(null);
actual.Match.Fuzziness.Ratio.Should().Be(1.3);
actual.Match.Fuzziness.Auto.Should().BeFalse();
}

[Test]
public void ItCanConvertFuzziness()
{
var expectedObjects = new List<ConverterTestObject>
{
new ConverterTestObject
{
Name = "FuzzinessTest",
Fuzziness = Fuzziness.Auto
},
new ConverterTestObject
{
Name = "FuzzinessTest",
Fuzziness = Fuzziness.EditDistance(2)
},
new ConverterTestObject
{
Name = "FuzzinessTest",
Fuzziness = Fuzziness.Ratio(23.21123)
}
};

var actual = SerializeAndDeserialize(expectedObjects);

actual[0].Fuzziness.Auto.Should().BeTrue();
actual[1].Fuzziness.EditDistance.Should().Be(2);
actual[2].Fuzziness.Ratio.Should().Be(23.21123);
}
}
}
2 changes: 2 additions & 0 deletions src/Tests/Nest.Tests.Unit/Nest.Tests.Unit.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,8 @@
<Compile Include="Cluster\HealthTests.cs" />
<Compile Include="Cluster\NodeTests.cs" />
<Compile Include="Cluster\State\StateTests.cs" />
<Compile Include="Converters\BaseConverterTest.cs" />
<Compile Include="Converters\FuzzinessConverterTests.cs" />
<Compile Include="Core\Bulk\BulkTests.cs" />
<Compile Include="Core\Bulk\BulkUrlTests.cs" />
<Compile Include="Core\Indices\Alias\AliasTests.cs" />
Expand Down
19 changes: 8 additions & 11 deletions src/Tests/Nest.Tests.Unit/QueryParsers/BaseParserTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,15 @@ public abstract class BaseParserTests : BaseJsonTests
{
public ISearchRequest GetSearchDescriptorForQuery(Func<SearchDescriptor<ElasticsearchProject>, SearchDescriptor<ElasticsearchProject>> create)
{
var descriptor = create(new SearchDescriptor<ElasticsearchProject>());
var json = this._client.Serializer.Serialize(descriptor);
Console.WriteLine(json.Utf8String());
using (var ms = new MemoryStream(json))
{
ISearchRequest d = this._client.Serializer.Deserialize<SearchDescriptor<ElasticsearchProject>>(ms);
d.Should().NotBeNull();
d.Query.Should().NotBeNull();
return d;
}
return GetSearchDescriptor(create, request => request.Query.Should().NotBeNull());
}

public ISearchRequest GetSearchDescriptorForFilter(Func<SearchDescriptor<ElasticsearchProject>, SearchDescriptor<ElasticsearchProject>> create)
{
return GetSearchDescriptor(create, request => request.Filter.Should().NotBeNull());
}

private ISearchRequest GetSearchDescriptor(Func<SearchDescriptor<ElasticsearchProject>, SearchDescriptor<ElasticsearchProject>> create, Action<ISearchRequest> assertFunc )
{
var descriptor = create(new SearchDescriptor<ElasticsearchProject>());
var json = this._client.Serializer.Serialize(descriptor);
Expand All @@ -33,7 +30,7 @@ public ISearchRequest GetSearchDescriptorForFilter(Func<SearchDescriptor<Elastic
{
ISearchRequest d = this._client.Serializer.Deserialize<SearchDescriptor<ElasticsearchProject>>(ms);
d.Should().NotBeNull();
d.Filter.Should().NotBeNull();
assertFunc(d);
return d;
}
}
Expand Down
Loading