Skip to content

Commit cf9fe79

Browse files
authored
Add exponential histogram field type (#3814)
1 parent a01dd2c commit cf9fe79

File tree

4 files changed

+77
-77
lines changed

4 files changed

+77
-77
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.sksamuel.elastic4s.fields
2+
3+
object ExponentialHistogramField {
4+
val `type`: String = "exponential_histogram"
5+
}
6+
case class ExponentialHistogramField(name: String) extends ElasticField {
7+
override def `type`: String = ExponentialHistogramField.`type`
8+
}

elastic4s-handlers/src/main/scala/com/sksamuel/elastic4s/handlers/fields/ElasticFieldBuilderFn.scala

Lines changed: 46 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -1,90 +1,58 @@
11
package com.sksamuel.elastic4s.handlers.fields
22

33
import com.sksamuel.elastic4s.fields.{
4-
AggregateMetricField,
5-
AliasField,
6-
AnnotatedTextField,
7-
BinaryField,
8-
BooleanField,
9-
CompletionField,
10-
ConstantKeywordField,
11-
DateField,
12-
DateNanosField,
13-
DenseVectorField,
14-
DynamicField,
15-
ElasticField,
16-
FlattenedField,
17-
GeoPointField,
18-
GeoShapeField,
19-
HistogramField,
20-
IcuCollationKeywordField,
21-
IpField,
22-
IpRangeField,
23-
JoinField,
24-
KeywordField,
25-
MatchOnlyTextField,
26-
Murmur3Field,
27-
NestedField,
28-
NumberField,
29-
ObjectField,
30-
PatternTextField,
31-
PercolatorField,
32-
RangeField,
33-
RankFeatureField,
34-
RankFeaturesField,
35-
RankVectorsField,
36-
SearchAsYouTypeField,
37-
SemanticTextField,
38-
SparseVectorField,
39-
TextField,
40-
TokenCountField,
41-
VersionField,
42-
WildcardField
4+
AggregateMetricField, AliasField, AnnotatedTextField, BinaryField, BooleanField, CompletionField,
5+
ConstantKeywordField, DateField, DateNanosField, DenseVectorField, DynamicField, ElasticField,
6+
ExponentialHistogramField, FlattenedField, GeoPointField, GeoShapeField, HistogramField, IcuCollationKeywordField,
7+
IpField, IpRangeField, JoinField, KeywordField, MatchOnlyTextField, Murmur3Field, NestedField, NumberField,
8+
ObjectField, PatternTextField, PercolatorField, RangeField, RankFeatureField, RankFeaturesField, RankVectorsField,
9+
SearchAsYouTypeField, SemanticTextField, SparseVectorField, TextField, TokenCountField, VersionField, WildcardField
4310
}
4411
import com.sksamuel.elastic4s.json.XContentBuilder
4512

4613
object ElasticFieldBuilderFn {
4714

4815
def apply(field: ElasticField): XContentBuilder = {
4916
field match {
50-
case f: AggregateMetricField => AggregateMetricFieldBuilderFn.build(f)
51-
case f: AliasField => AliasFieldBuilderFn.build(f)
52-
case f: AnnotatedTextField => AnnotatedTextFieldBuilderFn.build(f)
53-
case f: BinaryField => BinaryFieldBuilderFn.build(f)
54-
case f: BooleanField => BooleanFieldBuilderFn.build(f)
55-
case f: ConstantKeywordField => ConstantKeywordFieldBuilderFn.build(f)
56-
case f: CompletionField => CompletionFieldBuilderFn.build(f)
57-
case f: DateField => DateFieldBuilderFn.build(f)
58-
case f: DateNanosField => DateNanosFieldBuilderFn.build(f)
59-
case f: DenseVectorField => DenseVectorFieldBuilderFn.build(f)
60-
case f: DynamicField => DynamicFieldBuilderFn.build(f)
61-
case f: FlattenedField => FlattenedFieldBuilderFn.build(f)
62-
case f: GeoPointField => GeoPointFieldBuilderFn.build(f)
63-
case f: GeoShapeField => GeoShapeFieldBuilderFn.build(f)
64-
case f: HistogramField => HistogramFieldBuilderFn.build(f)
65-
case f: IcuCollationKeywordField => IcuCollationKeywordFieldBuilderFn.build(f)
66-
case f: IpField => IpFieldBuilderFn.build(f)
67-
case f: IpRangeField => IpRangeFieldBuilderFn.build(f)
68-
case f: JoinField => JoinFieldBuilderFn.build(f)
69-
case f: KeywordField => KeywordFieldBuilderFn.build(f)
70-
case f: MatchOnlyTextField => MatchOnlyTextFieldBuilderFn.build(f)
71-
case f: Murmur3Field => Murmur3FieldBuilderFn.build(f)
72-
case f: NestedField => NestedFieldBuilderFn.build(f)
73-
case f: NumberField[_] => NumberFieldBuilderFn.build(f)
74-
case f: ObjectField => ObjectFieldBuilderFn.build(f)
75-
case f: PatternTextField => PatternTextFieldBuilderFn.build(f)
76-
case f: PercolatorField => PercolatorFieldBuilderFn.build(f)
77-
case f: RangeField => RangeFieldBuilderFn.build(f)
78-
case f: RankFeatureField => RankFeatureFieldBuilderFn.build(f)
79-
case f: RankFeaturesField => RankFeaturesFieldBuilderFn.build(f)
80-
case f: RankVectorsField => RankVectorsFieldBuilderFn.build(f)
81-
case f: SemanticTextField => SemanticTextFieldBuilderFn.build(f)
82-
case f: SearchAsYouTypeField => SearchAsYouTypeFieldBuilderFn.build(f)
83-
case f: SparseVectorField => SparseVectorFieldBuilderFn.build(f)
84-
case f: TextField => TextFieldBuilderFn.build(f)
85-
case f: TokenCountField => TokenCountFieldBuilderFn.build(f)
86-
case f: VersionField => VersionFieldBuilderFn.build(f)
87-
case f: WildcardField => WildcardFieldBuilderFn.build(f)
17+
case f: AggregateMetricField => AggregateMetricFieldBuilderFn.build(f)
18+
case f: AliasField => AliasFieldBuilderFn.build(f)
19+
case f: AnnotatedTextField => AnnotatedTextFieldBuilderFn.build(f)
20+
case f: BinaryField => BinaryFieldBuilderFn.build(f)
21+
case f: BooleanField => BooleanFieldBuilderFn.build(f)
22+
case f: ConstantKeywordField => ConstantKeywordFieldBuilderFn.build(f)
23+
case f: CompletionField => CompletionFieldBuilderFn.build(f)
24+
case f: DateField => DateFieldBuilderFn.build(f)
25+
case f: DateNanosField => DateNanosFieldBuilderFn.build(f)
26+
case f: DenseVectorField => DenseVectorFieldBuilderFn.build(f)
27+
case f: DynamicField => DynamicFieldBuilderFn.build(f)
28+
case f: ExponentialHistogramField => ExponentialHistogramFieldBuilderFn.build(f)
29+
case f: FlattenedField => FlattenedFieldBuilderFn.build(f)
30+
case f: GeoPointField => GeoPointFieldBuilderFn.build(f)
31+
case f: GeoShapeField => GeoShapeFieldBuilderFn.build(f)
32+
case f: HistogramField => HistogramFieldBuilderFn.build(f)
33+
case f: IcuCollationKeywordField => IcuCollationKeywordFieldBuilderFn.build(f)
34+
case f: IpField => IpFieldBuilderFn.build(f)
35+
case f: IpRangeField => IpRangeFieldBuilderFn.build(f)
36+
case f: JoinField => JoinFieldBuilderFn.build(f)
37+
case f: KeywordField => KeywordFieldBuilderFn.build(f)
38+
case f: MatchOnlyTextField => MatchOnlyTextFieldBuilderFn.build(f)
39+
case f: Murmur3Field => Murmur3FieldBuilderFn.build(f)
40+
case f: NestedField => NestedFieldBuilderFn.build(f)
41+
case f: NumberField[_] => NumberFieldBuilderFn.build(f)
42+
case f: ObjectField => ObjectFieldBuilderFn.build(f)
43+
case f: PatternTextField => PatternTextFieldBuilderFn.build(f)
44+
case f: PercolatorField => PercolatorFieldBuilderFn.build(f)
45+
case f: RangeField => RangeFieldBuilderFn.build(f)
46+
case f: RankFeatureField => RankFeatureFieldBuilderFn.build(f)
47+
case f: RankFeaturesField => RankFeaturesFieldBuilderFn.build(f)
48+
case f: RankVectorsField => RankVectorsFieldBuilderFn.build(f)
49+
case f: SemanticTextField => SemanticTextFieldBuilderFn.build(f)
50+
case f: SearchAsYouTypeField => SearchAsYouTypeFieldBuilderFn.build(f)
51+
case f: SparseVectorField => SparseVectorFieldBuilderFn.build(f)
52+
case f: TextField => TextFieldBuilderFn.build(f)
53+
case f: TokenCountField => TokenCountFieldBuilderFn.build(f)
54+
case f: VersionField => VersionFieldBuilderFn.build(f)
55+
case f: WildcardField => WildcardFieldBuilderFn.build(f)
8856
}
8957
}
9058

@@ -100,6 +68,7 @@ object ElasticFieldBuilderFn {
10068
case DateField.`type` => DateFieldBuilderFn.toField(name, values)
10169
case DateNanosField.`type` => DateNanosFieldBuilderFn.toField(name, values)
10270
case DenseVectorField.`type` => DenseVectorFieldBuilderFn.toField(name, values)
71+
case ExponentialHistogramField.`type` => ExponentialHistogramFieldBuilderFn.toField(name, values)
10372
case FlattenedField.`type` => FlattenedFieldBuilderFn.toField(name, values)
10473
case GeoPointField.`type` => GeoPointFieldBuilderFn.toField(name, values)
10574
case GeoShapeField.`type` => GeoShapeFieldBuilderFn.toField(name, values)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.sksamuel.elastic4s.handlers.fields
2+
3+
import com.sksamuel.elastic4s.fields.ExponentialHistogramField
4+
import com.sksamuel.elastic4s.json.{XContentBuilder, XContentFactory}
5+
6+
object ExponentialHistogramFieldBuilderFn {
7+
def toField(name: String, values: Map[String, Any]): ExponentialHistogramField = ExponentialHistogramField(name)
8+
9+
def build(field: ExponentialHistogramField): XContentBuilder = {
10+
val builder = XContentFactory.jsonBuilder()
11+
builder.field("type", field.`type`)
12+
builder.endObject()
13+
}
14+
}

elastic4s-tests/src/test/scala/com/sksamuel/elastic4s/fields/ElasticFieldBuilderFnTest.scala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,5 +316,14 @@ class ElasticFieldBuilderFnTest extends AnyWordSpec with Matchers {
316316
JacksonSupport.mapper.readValue[Map[String, Any]](jsonString)
317317
) shouldBe field
318318
}
319+
"support ExponentialHistogramField" in {
320+
val field = ExponentialHistogramField("exponential_histogram_field")
321+
val jsonString = """{"type":"exponential_histogram"}"""
322+
ElasticFieldBuilderFn(field).string shouldBe jsonString
323+
ElasticFieldBuilderFn.construct(
324+
field.name,
325+
JacksonSupport.mapper.readValue[Map[String, Any]](jsonString)
326+
) shouldBe field
327+
}
319328
}
320329
}

0 commit comments

Comments
 (0)