Skip to content

Commit a6ef1c8

Browse files
committed
Fluent support for configuring similarity modules
1 parent dc2790f commit a6ef1c8

29 files changed

+625
-145
lines changed

Diff for: src/Nest/.gitignore

-2
This file was deleted.

Diff for: src/Nest/DSL/CreateIndexDescriptor.cs

+8-1
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,14 @@ public CreateIndexDescriptor Analysis(Func<AnalysisDescriptor, AnalysisDescripto
185185
this._IndexSettings.Analysis = analysis == null ? null : analysis._AnalysisSettings;
186186
return this;
187187
}
188-
188+
189+
public CreateIndexDescriptor Similarity(Func<SimilarityDescriptor, SimilarityDescriptor> similaritySelector)
190+
{
191+
similaritySelector.ThrowIfNull("similaritySelector");
192+
var similarity = similaritySelector(new SimilarityDescriptor(this._IndexSettings.Similarity));
193+
this._IndexSettings.Similarity = similarity == null ? null : similarity._SimilaritySettings;
194+
return this;
195+
}
189196

190197
protected override void UpdatePathInfo(IConnectionSettingsValues settings, ElasticsearchPathInfo<CreateIndexRequestParameters> pathInfo)
191198
{

Diff for: src/Nest/DSL/SimilarityDescriptor.cs

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
6+
namespace Nest
7+
{
8+
public class SimilarityDescriptor
9+
{
10+
internal readonly SimilaritySettings _SimilaritySettings;
11+
12+
public SimilarityDescriptor()
13+
{
14+
this._SimilaritySettings = new SimilaritySettings();
15+
}
16+
17+
public SimilarityDescriptor(SimilaritySettings settings)
18+
{
19+
this._SimilaritySettings = settings;
20+
}
21+
22+
public SimilarityDescriptor CustomSimilarities(
23+
Func<FluentDictionary<string, SimilarityBase>, FluentDictionary<string, SimilarityBase>> similaritySelector)
24+
{
25+
similaritySelector.ThrowIfNull("similaritySelector");
26+
var similarities = new FluentDictionary<string, SimilarityBase>(this._SimilaritySettings.CustomSimilarities);
27+
var newSimilarities = similaritySelector(similarities);
28+
this._SimilaritySettings.CustomSimilarities = newSimilarities;
29+
return this;
30+
}
31+
32+
public SimilarityDescriptor Default(string defaultSimilarity)
33+
{
34+
this._SimilaritySettings.Default = defaultSimilarity;
35+
return this;
36+
}
37+
}
38+
}

Diff for: src/Nest/Domain/Settings/CustomSimilaritySettings.cs

-23
This file was deleted.

Diff for: src/Nest/Domain/Settings/IndexSettings.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public class IndexSettings
1616
public IndexSettings()
1717
{
1818
this.Analysis = new AnalysisSettings();
19+
this.Similarity = new SimilaritySettings();
1920
this.Mappings = new List<RootObjectMapping>();
2021
this.Warmers = new Dictionary<string, WarmerMapping>();
2122
this.Settings = new Dictionary<string, object>();
@@ -59,7 +60,7 @@ public int? NumberOfShards
5960
[JsonConverter(typeof(DictionaryKeysAreNotPropertyNamesJsonConverter))]
6061
public Dictionary<string, WarmerMapping> Warmers { get; internal set; }
6162

62-
public SimilaritySettings Similarity { get; set; }
63+
public SimilaritySettings Similarity { get; internal set; }
6364

6465

6566
}

Diff for: src/Nest/Domain/Settings/SimilaritySettings.cs

-24
This file was deleted.

Diff for: src/Nest/Domain/Similarity/BM25Similarity.cs

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using Newtonsoft.Json;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Text;
6+
7+
namespace Nest
8+
{
9+
public class BM25Similarity : SimilarityBase
10+
{
11+
public BM25Similarity()
12+
{
13+
this.Type = "BM25";
14+
}
15+
16+
[JsonProperty("k1")]
17+
public double K1 { get; set; }
18+
19+
[JsonProperty("b")]
20+
public double B { get; set; }
21+
22+
[JsonProperty("discount_overlaps")]
23+
public bool DiscountOverlaps { get; set; }
24+
}
25+
}

Diff for: src/Nest/Domain/Similarity/DFRSimilarity.cs

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using Newtonsoft.Json;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Text;
6+
7+
namespace Nest
8+
{
9+
public class DFRSimilarity : SimilarityBase
10+
{
11+
public DFRSimilarity()
12+
{
13+
this.Type = "DFR";
14+
}
15+
16+
[JsonProperty("basic_model")]
17+
public string BasicModel { get; set; }
18+
19+
[JsonProperty("after_effect")]
20+
public string AfterEffect { get; set; }
21+
}
22+
}

Diff for: src/Nest/Domain/Similarity/DefaultSimilarity.cs

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
using Newtonsoft.Json;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Text;
6+
7+
namespace Nest
8+
{
9+
public class DefaultSimilarity : SimilarityBase
10+
{
11+
public DefaultSimilarity()
12+
{
13+
this.Type = "default";
14+
}
15+
16+
[JsonProperty("discount_overlaps")]
17+
public bool DiscountOverlaps { get; set; }
18+
}
19+
}

Diff for: src/Nest/Domain/Similarity/IBSimilarity.cs

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using Newtonsoft.Json;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Text;
6+
7+
namespace Nest
8+
{
9+
public class IBSimilarity : SimilarityBase
10+
{
11+
public IBSimilarity()
12+
{
13+
this.Type = "IB";
14+
}
15+
16+
[JsonProperty("distribution")]
17+
public string Distribution { get; set; }
18+
19+
[JsonProperty("lambda")]
20+
public string Lambda { get; set; }
21+
}
22+
}

Diff for: src/Nest/Domain/Similarity/LMDirichletSimilarity.cs

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
using Newtonsoft.Json;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Text;
6+
7+
namespace Nest
8+
{
9+
public class LMDirichletSimilarity : SimilarityBase
10+
{
11+
public LMDirichletSimilarity()
12+
{
13+
this.Type = "LMDirichlet";
14+
}
15+
16+
[JsonProperty("mu")]
17+
public int Mu { get; set; }
18+
}
19+
}

Diff for: src/Nest/Domain/Similarity/LMJelinekSimilarity.cs

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
using Newtonsoft.Json;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Text;
6+
7+
namespace Nest
8+
{
9+
public class LMJelinekSimilarity : SimilarityBase
10+
{
11+
public LMJelinekSimilarity()
12+
{
13+
this.Type = "LMJelinekMercer";
14+
}
15+
16+
[JsonProperty("lambda")]
17+
public double Lambda { get; set; }
18+
}
19+
}

Diff for: src/Nest/Domain/Similarity/SimilarityBase.cs

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using Newtonsoft.Json;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Text;
6+
7+
namespace Nest
8+
{
9+
public class SimilarityBase
10+
{
11+
[JsonProperty("type")]
12+
public string Type { get; protected set; }
13+
14+
[JsonProperty("normalization")]
15+
public string Normalization { get; set; }
16+
17+
[JsonProperty("normalization.h1.c")]
18+
public string NormalizationH1C { get; set; }
19+
20+
[JsonProperty("normalization.h2.c")]
21+
public string NormalizationH2C { get; set; }
22+
23+
[JsonProperty("normalization.h3.c")]
24+
public string NormalizationH3C { get; set; }
25+
26+
[JsonProperty("normalization.z.z")]
27+
public string NormalizationZZ { get; set; }
28+
}
29+
}

Diff for: src/Nest/Domain/Similarity/SimilaritySettings.cs

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+

2+
using Nest.Resolvers.Converters;
3+
using Newtonsoft.Json;
4+
using System;
5+
using System.Collections.Generic;
6+
7+
namespace Nest
8+
{
9+
[JsonConverter(typeof(SimilaritySettingsConverter))]
10+
public class SimilaritySettings
11+
{
12+
public SimilaritySettings()
13+
{
14+
this.CustomSimilarities = new Dictionary<string, SimilarityBase>();
15+
}
16+
17+
public string Default { get; set; }
18+
19+
[JsonConverter(typeof(SimilarityCollectionConverter))]
20+
public IDictionary<string, SimilarityBase> CustomSimilarities { get; set; }
21+
}
22+
}

Diff for: src/Nest/Nest.csproj

+11-2
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,13 @@
152152
<Compile Include="Domain\Responses\RestoreResponse.cs" />
153153
<Compile Include="Domain\Responses\SnapshotResponse.cs" />
154154
<Compile Include="Domain\Aggregations\TermsIncludeExclude.cs" />
155+
<Compile Include="Domain\Similarity\BM25Similarity.cs" />
156+
<Compile Include="Domain\Similarity\DefaultSimilarity.cs" />
157+
<Compile Include="Domain\Similarity\DFRSimilarity.cs" />
158+
<Compile Include="Domain\Similarity\IBSimilarity.cs" />
159+
<Compile Include="Domain\Similarity\LMDirichletSimilarity.cs" />
160+
<Compile Include="Domain\Similarity\LMJelinekSimilarity.cs" />
161+
<Compile Include="Domain\Similarity\SimilarityBase.cs" />
155162
<Compile Include="DSL\ClusterGetSettingsDescriptor.cs" />
156163
<Compile Include="DSL\ClusterSettingsDescriptor.cs" />
157164
<Compile Include="DSL\DeleteSnapshotDescriptor.cs" />
@@ -168,6 +175,7 @@
168175
<Compile Include="DSL\Query\PlainQuery.cs" />
169176
<Compile Include="DSL\Query\QueryContainer.cs" />
170177
<Compile Include="DSL\Rescore\RescoreQueryDescriptor.cs" />
178+
<Compile Include="DSL\SimilarityDescriptor.cs" />
171179
<Compile Include="DSL\Suggest\Fuzziness.cs" />
172180
<Compile Include="DSL\Suggest\IFuzziness.cs" />
173181
<Compile Include="DSL\Visitor\DslPrettyPrintVisitor.cs" />
@@ -405,7 +413,6 @@
405413
<Compile Include="Domain\Responses\WarmerResponse.cs">
406414
<SubType>Code</SubType>
407415
</Compile>
408-
<Compile Include="Domain\Settings\CustomSimilaritySettings.cs" />
409416
<Compile Include="DSL\Rescore\RescoreDescriptor.cs" />
410417
<Compile Include="DSL\Termplates\CreateWarmerDescriptor.cs" />
411418
<Compile Include="DSL\PutWarmerDescriptor.cs" />
@@ -422,7 +429,7 @@
422429
<Compile Include="Domain\Responses\BulkOperationResponseItem.cs" />
423430
<Compile Include="Domain\Responses\MultiSearchResponse.cs" />
424431
<Compile Include="Domain\Responses\IBulkResponse.cs" />
425-
<Compile Include="Domain\Settings\SimilaritySettings.cs" />
432+
<Compile Include="Domain\Similarity\SimilaritySettings.cs" />
426433
<Compile Include="ElasticClient-MultiSearch.cs" />
427434
<Compile Include="Domain\Mapping\Types\TemplateMapping.cs" />
428435
<Compile Include="Domain\Responses\TemplateResponse.cs" />
@@ -637,6 +644,7 @@
637644
<Compile Include="DSL\Filter\LimitFilterDescriptor.cs" />
638645
<Compile Include="DSL\Filter\IdsFilterDescriptor.cs" />
639646
<Compile Include="DSL\Filter\ExistsFilterDescriptor.cs" />
647+
<Compile Include="Resolvers\Converters\SimilarityCollectionConverter.cs" />
640648
<Compile Include="Resolvers\Converters\FuzzinessConverter.cs" />
641649
<Compile Include="Resolvers\Converters\Filters\RangeFilterJsonReader.cs" />
642650
<Compile Include="Resolvers\Converters\Filters\RegexpFilterJsonReader.cs" />
@@ -745,6 +753,7 @@
745753
<Compile Include="Resolvers\Converters\FieldNameFilterConverter.cs" />
746754
<Compile Include="Resolvers\Converters\FieldNameQueryConverter.cs" />
747755
<Compile Include="Resolvers\Converters\IndexSettingsResponseConverter.cs" />
756+
<Compile Include="Resolvers\Converters\SimilaritySettingsConverter.cs" />
748757
<Compile Include="Resolvers\Converters\SuggestResponseConverter.cs" />
749758
<Compile Include="Resolvers\Converters\PropertyPathMarkerConverter.cs" />
750759
<Compile Include="Resolvers\Converters\DynamicMappingOptionConverter.cs" />

0 commit comments

Comments
 (0)