diff --git a/.editorconfig b/.editorconfig index e138a19c4cf..2a9284be08e 100644 --- a/.editorconfig +++ b/.editorconfig @@ -19,3 +19,7 @@ indent_size = 4 [*.markdown] indent_style = spaces indent_size = 2 + +[*.json] +indent_style = spaces +indent_size = 2 diff --git a/src/Nest/Domain/Mapping/Descriptors/BinaryMappingDescriptor.cs b/src/Nest/Domain/Mapping/Descriptors/BinaryMappingDescriptor.cs index ba9d35016b8..cf3564e2738 100644 --- a/src/Nest/Domain/Mapping/Descriptors/BinaryMappingDescriptor.cs +++ b/src/Nest/Domain/Mapping/Descriptors/BinaryMappingDescriptor.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using System.Linq.Expressions; using Nest.Resolvers; @@ -25,5 +26,16 @@ public BinaryMappingDescriptor IndexName(string indexName) return this; } + public BinaryMappingDescriptor CopyTo(params string[] fields) + { + this._Mapping.CopyTo = fields.Select(f => (PropertyPathMarker)f); + return this; + } + + public BinaryMappingDescriptor CopyTo(params Expression>[] objectPaths) + { + this._Mapping.CopyTo = objectPaths.Select(e => (PropertyPathMarker)e); + return this; + } } } \ No newline at end of file diff --git a/src/Nest/Domain/Mapping/Descriptors/BooleanMappingDescriptor.cs b/src/Nest/Domain/Mapping/Descriptors/BooleanMappingDescriptor.cs index 9afe77ca46f..6e903a5aa63 100644 --- a/src/Nest/Domain/Mapping/Descriptors/BooleanMappingDescriptor.cs +++ b/src/Nest/Domain/Mapping/Descriptors/BooleanMappingDescriptor.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using System.Linq.Expressions; using Nest.Resolvers; @@ -52,6 +53,16 @@ public BooleanMappingDescriptor IncludeInAll(bool includeInAll = true) return this; } + public BooleanMappingDescriptor CopyTo(params string[] fields) + { + this._Mapping.CopyTo = fields.Select(f => (PropertyPathMarker)f); + return this; + } + public BooleanMappingDescriptor CopyTo(params Expression>[] objectPaths) + { + this._Mapping.CopyTo = objectPaths.Select(e => (PropertyPathMarker)e); + return this; + } } } \ No newline at end of file diff --git a/src/Nest/Domain/Mapping/Descriptors/StringMappingDescriptor.cs b/src/Nest/Domain/Mapping/Descriptors/StringMappingDescriptor.cs index 0d3b7ed1859..0ff05c4c710 100644 --- a/src/Nest/Domain/Mapping/Descriptors/StringMappingDescriptor.cs +++ b/src/Nest/Domain/Mapping/Descriptors/StringMappingDescriptor.cs @@ -1,4 +1,5 @@ -using System; +using System; +using System.Linq; using System.Linq.Expressions; using Nest.Resolvers; @@ -92,5 +93,16 @@ public StringMappingDescriptor PositionOffsetGap(int positionOffsetGap) return this; } + public StringMappingDescriptor CopyTo(params string[] fields) + { + this._Mapping.CopyTo = fields.Select(f => (PropertyPathMarker)f); + return this; + } + + public StringMappingDescriptor CopyTo(params Expression>[] objectPaths) + { + this._Mapping.CopyTo = objectPaths.Select(e => (PropertyPathMarker)e); + return this; + } } } \ No newline at end of file diff --git a/src/Nest/Domain/Mapping/Types/BinaryMapping.cs b/src/Nest/Domain/Mapping/Types/BinaryMapping.cs index 22d32a14c41..e0eedffd48f 100644 --- a/src/Nest/Domain/Mapping/Types/BinaryMapping.cs +++ b/src/Nest/Domain/Mapping/Types/BinaryMapping.cs @@ -24,5 +24,8 @@ public class BinaryMapping : IElasticType, IElasticCoreType /// [JsonProperty("index_name")] public string IndexName { get; set; } + + [JsonProperty("copy_to")] + public IEnumerable CopyTo { get; set; } } } \ No newline at end of file diff --git a/src/Nest/Domain/Mapping/Types/BooleanMapping.cs b/src/Nest/Domain/Mapping/Types/BooleanMapping.cs index d46ed5ed871..c4febee6aef 100644 --- a/src/Nest/Domain/Mapping/Types/BooleanMapping.cs +++ b/src/Nest/Domain/Mapping/Types/BooleanMapping.cs @@ -40,5 +40,7 @@ public class BooleanMapping : IElasticType, IElasticCoreType [JsonProperty("include_in_all")] public bool? IncludeInAll { get; set; } + [JsonProperty("copy_to")] + public IEnumerable CopyTo { get; set; } } } \ No newline at end of file diff --git a/src/Nest/Domain/Mapping/Types/StringMapping.cs b/src/Nest/Domain/Mapping/Types/StringMapping.cs index 74bdf727af1..72409c1c15e 100644 --- a/src/Nest/Domain/Mapping/Types/StringMapping.cs +++ b/src/Nest/Domain/Mapping/Types/StringMapping.cs @@ -62,7 +62,9 @@ public class StringMapping : IElasticType, IElasticCoreType public bool? IncludeInAll { get; set; } [JsonProperty("position_offset_gap")] - public int? PositionOffsetGap { get; set; } - + public int? PositionOffsetGap { get; set; } + + [JsonProperty("copy_to")] + public IEnumerable CopyTo { get; set; } } } \ No newline at end of file diff --git a/src/Tests/Nest.Tests.Unit/Core/Map/FluentMappingFullExampleTests.cs b/src/Tests/Nest.Tests.Unit/Core/Map/FluentMappingFullExampleTests.cs index 690aeb9364b..bf9ce48a2c9 100644 --- a/src/Tests/Nest.Tests.Unit/Core/Map/FluentMappingFullExampleTests.cs +++ b/src/Tests/Nest.Tests.Unit/Core/Map/FluentMappingFullExampleTests.cs @@ -138,6 +138,7 @@ public void MapFluentFull() .Store() .TermVector(TermVectorOption.with_positions_offsets) .Boost(1.1) + .CopyTo(p => p.Content) ) .Number(s => s .Name(p => p.LOC) diff --git a/src/Tests/Nest.Tests.Unit/Core/Map/Properties/BinaryProperty.json b/src/Tests/Nest.Tests.Unit/Core/Map/Properties/BinaryProperty.json index b389c0cd288..4aa083fac59 100644 --- a/src/Tests/Nest.Tests.Unit/Core/Map/Properties/BinaryProperty.json +++ b/src/Tests/Nest.Tests.Unit/Core/Map/Properties/BinaryProperty.json @@ -1,10 +1,11 @@ - { - "elasticsearchprojects": { - "properties": { - "myBinaryField": { - "type": "binary", - "index_name": "binz" - } - } - } -} \ No newline at end of file +{ + "elasticsearchprojects": { + "properties": { + "myBinaryField": { + "type": "binary", + "index_name": "binz", + "copy_to": [ "another_field" ] + } + } + } +} diff --git a/src/Tests/Nest.Tests.Unit/Core/Map/Properties/BooleanProperty.json b/src/Tests/Nest.Tests.Unit/Core/Map/Properties/BooleanProperty.json index d3cfa5b9630..43054ecccc1 100644 --- a/src/Tests/Nest.Tests.Unit/Core/Map/Properties/BooleanProperty.json +++ b/src/Tests/Nest.Tests.Unit/Core/Map/Properties/BooleanProperty.json @@ -1,15 +1,16 @@ - { - "elasticsearchprojects": { - "properties": { - "boolValue": { - "type": "boolean", - "index_name": "bool_name_in_lucene_index", - "store": "yes", - "index": "analyzed", - "boost": 1.4, - "null_value": false, - "include_in_all": true - } - } - } -} \ No newline at end of file +{ + "elasticsearchprojects": { + "properties": { + "boolValue": { + "type": "boolean", + "index_name": "bool_name_in_lucene_index", + "store": "yes", + "index": "analyzed", + "boost": 1.4, + "null_value": false, + "include_in_all": true, + "copy_to": [ "content" ] + } + } + } +} diff --git a/src/Tests/Nest.Tests.Unit/Core/Map/Properties/PropertiesTests.cs b/src/Tests/Nest.Tests.Unit/Core/Map/Properties/PropertiesTests.cs index f41a15e0284..a39808ab4d3 100644 --- a/src/Tests/Nest.Tests.Unit/Core/Map/Properties/PropertiesTests.cs +++ b/src/Tests/Nest.Tests.Unit/Core/Map/Properties/PropertiesTests.cs @@ -28,6 +28,7 @@ public void StringProperty() .Store() .TermVector(TermVectorOption.with_positions_offsets) .Boost(1.1) + .CopyTo(p => p.Content, p => p.Country) ) ) ); @@ -88,6 +89,7 @@ public void BooleanProperty() .IndexName("bool_name_in_lucene_index") .NullValue(false) .Store() + .CopyTo(p => p.Content) ) ) ); @@ -101,6 +103,7 @@ public void BinaryProperty() .Binary(s => s .Name(p => p.MyBinaryField) .IndexName("binz") + .CopyTo("another_field") ) ) ); diff --git a/src/Tests/Nest.Tests.Unit/Core/Map/Properties/StringProperty.json b/src/Tests/Nest.Tests.Unit/Core/Map/Properties/StringProperty.json index 3aa4dc742a8..6de8a26790f 100644 --- a/src/Tests/Nest.Tests.Unit/Core/Map/Properties/StringProperty.json +++ b/src/Tests/Nest.Tests.Unit/Core/Map/Properties/StringProperty.json @@ -1,21 +1,22 @@ - { - "elasticsearchprojects": { - "properties": { - "name": { - "type": "string", - "index_name": "my_crazy_name_i_want_in_lucene", - "store": "yes", - "index": "analyzed", - "term_vector": "with_positions_offsets", - "boost": 1.1, - "null_value": "my_special_null_value", - "omit_norms": true, - "index_options": "positions", - "index_analyzer": "standard", - "search_analyzer": "standard", - "include_in_all": true, - "position_offset_gap": 1 - } - } - } -} \ No newline at end of file +{ + "elasticsearchprojects": { + "properties": { + "name": { + "type": "string", + "index_name": "my_crazy_name_i_want_in_lucene", + "store": "yes", + "index": "analyzed", + "term_vector": "with_positions_offsets", + "boost": 1.1, + "null_value": "my_special_null_value", + "omit_norms": true, + "index_options": "positions", + "index_analyzer": "standard", + "search_analyzer": "standard", + "include_in_all": true, + "position_offset_gap": 1, + "copy_to": [ "content", "country" ] + } + } + } +}