< Summary

Class:Azure.Search.Documents.Indexes.Models.SearchField
Assembly:Azure.Search.Documents
File(s):C:\Git\azure-sdk-for-net\sdk\search\Azure.Search.Documents\src\Generated\Models\SearchField.cs
C:\Git\azure-sdk-for-net\sdk\search\Azure.Search.Documents\src\Generated\Models\SearchField.Serialization.cs
C:\Git\azure-sdk-for-net\sdk\search\Azure.Search.Documents\src\Indexes\Models\SearchField.cs
Covered lines:144
Uncovered lines:14
Coverable lines:158
Total lines:472
Line coverage:91.1% (144 of 158)
Covered branches:66
Total branches:78
Branch coverage:84.6% (66 of 78)

Metrics

MethodCyclomatic complexity Line coverage Branch coverage
.ctor(...)-100%100%
Azure.Core.IUtf8JsonSerializable.Write(...)-82.69%78.13%
DeserializeSearchField(...)-94.12%94.74%
.ctor(...)-100%100%
get_Name()-100%100%
get_Type()-100%100%
get_IsSearchable()-100%100%
get_IsFilterable()-100%100%
get_IsHidden()-100%75%
set_IsHidden(...)-100%50%
get_IsRetrievable()-100%100%
get_IsSortable()-100%100%
get_IsFacetable()-100%100%
get_IsKey()-100%100%
get_AnalyzerName()-100%100%
get_SearchAnalyzerName()-100%100%
get_IndexAnalyzerName()-100%100%
get_SynonymMapNames()-100%100%
get_Fields()-100%100%
ToString()-0%100%

File(s)

C:\Git\azure-sdk-for-net\sdk\search\Azure.Search.Documents\src\Generated\Models\SearchField.cs

#LineLine coverage
 1// Copyright (c) Microsoft Corporation. All rights reserved.
 2// Licensed under the MIT License.
 3
 4// <auto-generated/>
 5
 6#nullable disable
 7
 8using System;
 9using System.Collections.Generic;
 10using Azure.Core;
 11
 12namespace Azure.Search.Documents.Indexes.Models
 13{
 14    /// <summary> Represents a field in an index definition, which describes the name, data type, and search behavior of
 15    public partial class SearchField
 16    {
 17
 18        /// <summary> Initializes a new instance of SearchField. </summary>
 19        /// <param name="name"> The name of the field, which must be unique within the fields collection of the index or
 20        /// <param name="type"> The data type of the field. </param>
 21        /// <param name="isKey"> A value indicating whether the field uniquely identifies documents in the index. Exactl
 22        /// <param name="isRetrievable"> A value indicating whether the field can be returned in a search result. You ca
 23        /// <param name="isSearchable"> A value indicating whether the field is full-text searchable. This means it will
 24        /// <param name="isFilterable"> A value indicating whether to enable the field to be referenced in $filter queri
 25        /// <param name="isSortable"> A value indicating whether to enable the field to be referenced in $orderby expres
 26        /// <param name="isFacetable"> A value indicating whether to enable the field to be referenced in facet queries.
 27        /// <param name="analyzerName"> The name of the analyzer to use for the field. This option can be used only with
 28        /// <param name="searchAnalyzerName"> The name of the analyzer used at search time for the field. This option ca
 29        /// <param name="indexAnalyzerName"> The name of the analyzer used at indexing time for the field. This option c
 30        /// <param name="synonymMapNames"> A list of the names of synonym maps to associate with this field. This option
 31        /// <param name="fields"> A list of sub-fields if this is a field of type Edm.ComplexType or Collection(Edm.Comp
 31032        internal SearchField(string name, SearchFieldDataType type, bool? isKey, bool? isRetrievable, bool? isSearchable
 33        {
 31034            Name = name;
 31035            Type = type;
 31036            IsKey = isKey;
 31037            IsRetrievable = isRetrievable;
 31038            IsSearchable = isSearchable;
 31039            IsFilterable = isFilterable;
 31040            IsSortable = isSortable;
 31041            IsFacetable = isFacetable;
 31042            AnalyzerName = analyzerName;
 31043            SearchAnalyzerName = searchAnalyzerName;
 31044            IndexAnalyzerName = indexAnalyzerName;
 31045            SynonymMapNames = synonymMapNames;
 31046            Fields = fields;
 31047        }
 48    }
 49}

C:\Git\azure-sdk-for-net\sdk\search\Azure.Search.Documents\src\Generated\Models\SearchField.Serialization.cs

#LineLine coverage
 1// Copyright (c) Microsoft Corporation. All rights reserved.
 2// Licensed under the MIT License.
 3
 4// <auto-generated/>
 5
 6#nullable disable
 7
 8using System.Collections.Generic;
 9using System.Text.Json;
 10using Azure.Core;
 11
 12namespace Azure.Search.Documents.Indexes.Models
 13{
 14    public partial class SearchField : IUtf8JsonSerializable
 15    {
 16        void IUtf8JsonSerializable.Write(Utf8JsonWriter writer)
 17        {
 18618            writer.WriteStartObject();
 18619            writer.WritePropertyName("name");
 18620            writer.WriteStringValue(Name);
 18621            writer.WritePropertyName("type");
 18622            writer.WriteStringValue(Type.ToString());
 18623            if (Optional.IsDefined(IsKey))
 24            {
 17225                writer.WritePropertyName("key");
 17226                writer.WriteBooleanValue(IsKey.Value);
 27            }
 18628            if (Optional.IsDefined(IsRetrievable))
 29            {
 17230                writer.WritePropertyName("retrievable");
 17231                writer.WriteBooleanValue(IsRetrievable.Value);
 32            }
 18633            if (Optional.IsDefined(IsSearchable))
 34            {
 17235                writer.WritePropertyName("searchable");
 17236                writer.WriteBooleanValue(IsSearchable.Value);
 37            }
 18638            if (Optional.IsDefined(IsFilterable))
 39            {
 17240                writer.WritePropertyName("filterable");
 17241                writer.WriteBooleanValue(IsFilterable.Value);
 42            }
 18643            if (Optional.IsDefined(IsSortable))
 44            {
 17245                writer.WritePropertyName("sortable");
 17246                writer.WriteBooleanValue(IsSortable.Value);
 47            }
 18648            if (Optional.IsDefined(IsFacetable))
 49            {
 17250                writer.WritePropertyName("facetable");
 17251                writer.WriteBooleanValue(IsFacetable.Value);
 52            }
 18653            if (Optional.IsDefined(AnalyzerName))
 54            {
 3155                if (AnalyzerName != null)
 56                {
 3157                    writer.WritePropertyName("analyzer");
 3158                    writer.WriteStringValue(AnalyzerName.Value.ToString());
 59                }
 60                else
 61                {
 062                    writer.WriteNull("analyzer");
 63                }
 64            }
 18665            if (Optional.IsDefined(SearchAnalyzerName))
 66            {
 067                if (SearchAnalyzerName != null)
 68                {
 069                    writer.WritePropertyName("searchAnalyzer");
 070                    writer.WriteStringValue(SearchAnalyzerName.Value.ToString());
 71                }
 72                else
 73                {
 074                    writer.WriteNull("searchAnalyzer");
 75                }
 76            }
 18677            if (Optional.IsDefined(IndexAnalyzerName))
 78            {
 079                if (IndexAnalyzerName != null)
 80                {
 081                    writer.WritePropertyName("indexAnalyzer");
 082                    writer.WriteStringValue(IndexAnalyzerName.Value.ToString());
 83                }
 84                else
 85                {
 086                    writer.WriteNull("indexAnalyzer");
 87                }
 88            }
 18689            if (Optional.IsCollectionDefined(SynonymMapNames))
 90            {
 4991                writer.WritePropertyName("synonymMaps");
 4992                writer.WriteStartArray();
 10093                foreach (var item in SynonymMapNames)
 94                {
 195                    writer.WriteStringValue(item);
 96                }
 4997                writer.WriteEndArray();
 98            }
 18699            if (Optional.IsCollectionDefined(Fields))
 100            {
 14101                writer.WritePropertyName("fields");
 14102                writer.WriteStartArray();
 204103                foreach (var item in Fields)
 104                {
 88105                    writer.WriteObjectValue(item);
 106                }
 14107                writer.WriteEndArray();
 108            }
 186109            writer.WriteEndObject();
 186110        }
 111
 112        internal static SearchField DeserializeSearchField(JsonElement element)
 113        {
 310114            string name = default;
 310115            SearchFieldDataType type = default;
 310116            Optional<bool> key = default;
 310117            Optional<bool> retrievable = default;
 310118            Optional<bool> searchable = default;
 310119            Optional<bool> filterable = default;
 310120            Optional<bool> sortable = default;
 310121            Optional<bool> facetable = default;
 310122            Optional<LexicalAnalyzerName?> analyzer = default;
 310123            Optional<LexicalAnalyzerName?> searchAnalyzer = default;
 310124            Optional<LexicalAnalyzerName?> indexAnalyzer = default;
 310125            Optional<IList<string>> synonymMaps = default;
 310126            Optional<IList<SearchField>> fields = default;
 7628127            foreach (var property in element.EnumerateObject())
 128            {
 3504129                if (property.NameEquals("name"))
 130                {
 310131                    name = property.Value.GetString();
 310132                    continue;
 133                }
 3194134                if (property.NameEquals("type"))
 135                {
 310136                    type = new SearchFieldDataType(property.Value.GetString());
 310137                    continue;
 138                }
 2884139                if (property.NameEquals("key"))
 140                {
 286141                    key = property.Value.GetBoolean();
 286142                    continue;
 143                }
 2598144                if (property.NameEquals("retrievable"))
 145                {
 286146                    retrievable = property.Value.GetBoolean();
 286147                    continue;
 148                }
 2312149                if (property.NameEquals("searchable"))
 150                {
 286151                    searchable = property.Value.GetBoolean();
 286152                    continue;
 153                }
 2026154                if (property.NameEquals("filterable"))
 155                {
 286156                    filterable = property.Value.GetBoolean();
 286157                    continue;
 158                }
 1740159                if (property.NameEquals("sortable"))
 160                {
 286161                    sortable = property.Value.GetBoolean();
 286162                    continue;
 163                }
 1454164                if (property.NameEquals("facetable"))
 165                {
 286166                    facetable = property.Value.GetBoolean();
 286167                    continue;
 168                }
 1168169                if (property.NameEquals("analyzer"))
 170                {
 286171                    if (property.Value.ValueKind == JsonValueKind.Null)
 172                    {
 237173                        analyzer = null;
 237174                        continue;
 175                    }
 49176                    analyzer = new LexicalAnalyzerName(property.Value.GetString());
 49177                    continue;
 178                }
 882179                if (property.NameEquals("searchAnalyzer"))
 180                {
 286181                    if (property.Value.ValueKind == JsonValueKind.Null)
 182                    {
 286183                        searchAnalyzer = null;
 286184                        continue;
 185                    }
 0186                    searchAnalyzer = new LexicalAnalyzerName(property.Value.GetString());
 0187                    continue;
 188                }
 596189                if (property.NameEquals("indexAnalyzer"))
 190                {
 286191                    if (property.Value.ValueKind == JsonValueKind.Null)
 192                    {
 286193                        indexAnalyzer = null;
 286194                        continue;
 195                    }
 0196                    indexAnalyzer = new LexicalAnalyzerName(property.Value.GetString());
 0197                    continue;
 198                }
 310199                if (property.NameEquals("synonymMaps"))
 200                {
 286201                    List<string> array = new List<string>();
 574202                    foreach (var item in property.Value.EnumerateArray())
 203                    {
 1204                        array.Add(item.GetString());
 205                    }
 286206                    synonymMaps = array;
 286207                    continue;
 208                }
 24209                if (property.NameEquals("fields"))
 210                {
 24211                    List<SearchField> array = new List<SearchField>();
 348212                    foreach (var item in property.Value.EnumerateArray())
 213                    {
 150214                        array.Add(DeserializeSearchField(item));
 215                    }
 24216                    fields = array;
 217                    continue;
 218                }
 219            }
 310220            return new SearchField(name, type, Optional.ToNullable(key), Optional.ToNullable(retrievable), Optional.ToNu
 221        }
 222    }
 223}

C:\Git\azure-sdk-for-net\sdk\search\Azure.Search.Documents\src\Indexes\Models\SearchField.cs

#LineLine coverage
 1// Copyright (c) Microsoft Corporation. All rights reserved.
 2// Licensed under the MIT License.
 3
 4using System;
 5using System.Collections.Generic;
 6using Azure.Core;
 7
 8namespace Azure.Search.Documents.Indexes.Models
 9{
 10    /// <summary>
 11    /// <para>
 12    /// Represents a field in an index definition, which describes the name, data type, and search behavior of a field.
 13    /// </para>
 14    /// <para>
 15    /// When creating an index, instead use the <see cref="SimpleField"/>, <see cref="SearchableField"/>, and <see cref=
 16    /// </para>
 17    /// </summary>
 18    [CodeGenModel("Field")]
 19    public partial class SearchField
 20    {
 21        // TODO: Replace constructor and read-only properties when https://github.com/Azure/autorest.csharp/issues/554 i
 22
 23        /// <summary>
 24        /// Initializes a new instance of the <see cref="SearchField"/> class.
 25        /// </summary>
 26        /// <param name="name">The name of the field, which must be unique within the index or parent field.</param>
 27        /// <param name="type">The data type of the field.</param>
 28        /// <exception cref="ArgumentException"><paramref name="name"/> is an empty string.</exception>
 29        /// <exception cref="ArgumentNullException"><paramref name="name"/> is null.</exception>
 2031030        public SearchField(string name, SearchFieldDataType type)
 31        {
 2031032            Argument.AssertNotNullOrEmpty(name, nameof(name));
 33
 2031034            Name = name;
 2031035            Type = type;
 36
 2031037            Fields = new ChangeTrackingList<SearchField>();
 2031038            SynonymMapNames = new ChangeTrackingList<string>();
 2031039        }
 40
 41        /// <summary>
 42        /// Gets the name of the field.
 43        /// </summary>
 2045944        public string Name { get; }
 45
 46        /// <summary>
 47        /// Ge the data type of the field.
 48        /// </summary>
 118449        public SearchFieldDataType Type { get; }
 50
 51        // TODO: Remove "overrides" for boolean properties when https://github.com/Azure/autorest.csharp/issues/558 is f
 52
 53        /// <summary>
 54        /// Gets or sets a value indicating whether the field is full-text searchable. The default is null.
 55        /// This means it will undergo analysis such as word-breaking during indexing.
 56        /// This property can be true only for <see cref="SearchFieldDataType.String"/> or "Collection(DataType.String)"
 57        /// </summary>
 58        /// <remarks>
 59        /// <para>
 60        /// Full-text searches enable the field value "sunny day" to be split into individual terms "sunny" and "day". T
 61        /// </para>
 62        /// <para>
 63        /// This field must be set according to constraints described in the summary, or the server may respond with an 
 64        /// Instead, consider using the <see cref="SimpleField"/>, <see cref="SearchableField"/>, and <see cref="Complex
 65        /// </para>
 66        /// </remarks>
 67        [CodeGenMember("searchable")]
 2677668        public bool? IsSearchable { get; set; }
 69
 70        /// <summary>
 71        /// Gets or sets a value indicating whether the field can be referenced in <c>$filter</c> queries. The default i
 72        /// This property must be null for complex fields, but can be set on simple fields within a complex field.
 73        /// </summary>
 74        /// <remarks>
 75        /// <para>
 76        /// Filterable differs from searchable in how strings are handled. Fields of type <see cref="SearchFieldDataType
 77        /// For example, if you set such a field <c>f</c> to "sunny day", <c>$filter=f eq 'sunny'</c> will find no match
 78        /// </para>
 79        /// <para>
 80        /// This field must be set according to constraints described in the summary, or the server may respond with an 
 81        /// Instead, consider using the <see cref="SimpleField"/>, <see cref="SearchableField"/>, and <see cref="Complex
 82        /// </para>
 83        /// </remarks>
 84        [CodeGenMember("filterable")]
 2345685        public bool? IsFilterable { get; set; }
 86
 87        /// <summary>
 88        /// Gets or sets a value indicating whether the field will be returned in a search result. The default is null.
 89        /// This property must be true for key fields, and must be null for complex fields.
 90        /// </summary>
 91        /// <remarks>
 92        /// <para>
 93        /// You can hide a field from search results if you want to use it only as a filter, for sorting, or for scoring
 94        /// This property can also be changed on existing fields and enabling it does not cause an increase in index sto
 95        /// </para>
 96        /// <para>
 97        /// This field must be set according to constraints described in the summary, or the server may respond with an 
 98        /// Instead, consider using the <see cref="SimpleField"/>, <see cref="SearchableField"/>, and <see cref="Complex
 99        /// </para>
 100        /// </remarks>
 101        public bool? IsHidden
 102        {
 1186103            get => IsRetrievable.HasValue ? !IsRetrievable : null;
 21602104            set => IsRetrievable = value.HasValue ? !value : null;
 105        }
 106
 107        [CodeGenMember("retrievable")]
 24582108        private bool? IsRetrievable { get; set; }
 109
 110        /// <summary>
 111        /// Gets or sets a value indicating whether the field can be referenced in a <c>$orderby</c> expression. The def
 112        /// A simple field can be sortable only if it is a single-valued type such as <see cref="SearchFieldDataType.Str
 113        /// </summary>
 114        /// <remarks>
 115        /// This field must be set according to constraints described in the summary, or the server may respond with an 
 116        /// Instead, consider using the <see cref="SimpleField"/>, <see cref="SearchableField"/>, and <see cref="Complex
 117        /// </remarks>
 118        [CodeGenMember("sortable")]
 23456119        public bool? IsSortable { get; set; }
 120
 121        /// <summary>
 122        /// Gets or sets a value indicating whether the field can be retrieved in facet queries. The default is null.
 123        /// This property must be null for complex fields, but can be set on simple fields within a complex field.
 124        /// </summary>
 125        /// <remarks>
 126        /// <para>
 127        /// Facets are used in presentation of search results that include hit counts by categories.
 128        /// For example, in a search for digital cameras, facets might include branch, megapixels, price, etc.
 129        /// </para>
 130        /// <para>
 131        /// This field must be set according to constraints described in the summary, or the server may respond with an 
 132        /// Instead, consider using the <see cref="SimpleField"/>, <see cref="SearchableField"/>, and <see cref="Complex
 133        /// </para>
 134        /// </remarks>
 135        [CodeGenMember("facetable")]
 23456136        public bool? IsFacetable { get; set; }
 137
 138        /// <summary>
 139        /// Gets or sets whether the field is the key field. The default is null.
 140        /// A <see cref="SearchIndex"/> must have exactly one key field of type <see cref="SearchFieldDataType.String"/>
 141        /// </summary>
 142        /// <remarks>
 143        /// This field must be set according to constraints described in the summary, or the server may respond with an 
 144        /// Instead, consider using the <see cref="SimpleField"/>, <see cref="SearchableField"/>, and <see cref="Complex
 145        /// </remarks>
 146        [CodeGenMember("key")]
 23594147        public bool? IsKey { get; set; }
 148
 149        /// <summary>
 150        /// Gets or sets the name of the analyzer to use for the field.
 151        /// This option can be used only with searchable fields and it cannot be set together with either <see cref="Sea
 152        /// Once the analyzer is chosen, it cannot be changed for the field.
 153        /// Must be null for complex fields.
 154        /// </summary>
 155        [CodeGenMember("analyzer")]
 2738156        public LexicalAnalyzerName? AnalyzerName { get; set; }
 157
 158        /// <summary>
 159        /// Gets or sets the name of the analyzer used at search time for the field.
 160        /// This option can be used only with searchable fields.
 161        /// It must be set together with <see cref="IndexAnalyzerName"/> and it cannot be set together with the <see cre
 162        /// This property cannot be set to the name of a language analyzer; use the <see cref="AnalyzerName"/> property 
 163        /// This analyzer can be updated on an existing field.
 164        /// Must be null for complex fields.
 165        /// </summary>
 166        [CodeGenMember("searchAnalyzer")]
 1894167        public LexicalAnalyzerName? SearchAnalyzerName { get; set; }
 168
 169        /// <summary>
 170        /// Gets or sets the name of the analyzer used at indexing time for the field.
 171        /// This option can be used only with searchable fields.
 172        /// It must be set together with <see cref="SearchAnalyzerName"/> and it cannot be set together with the <see cr
 173        /// This property cannot be set to the name of a language analyzer; use the <see cref="AnalyzerName"/> property 
 174        /// Once the analyzer is chosen, it cannot be changed for the field.
 175        /// Must be null for complex fields. </summary>
 176        [CodeGenMember("indexAnalyzer")]
 1894177        public LexicalAnalyzerName? IndexAnalyzerName { get; set; }
 178
 179        // TODO: Remove "overrides" for collection properties when https://github.com/Azure/autorest.csharp/issues/521 i
 180
 181        /// <summary>
 182        /// Gets a list of names of synonym maps associated with this field. Only fields where <see cref="IsSearchable"/
 183        /// </summary>
 184        [CodeGenMember("synonymMaps")]
 1938185        public IList<string> SynonymMapNames { get; }
 186
 187        /// <summary>
 188        /// Gets a list of nested fields if this field is of type <see cref="SearchFieldDataType.Complex"/> or "Collecti
 189        /// </summary>
 190        [CodeGenMember("fields")]
 33770191        public IList<SearchField> Fields { get; }
 192
 193
 194        /// <inheritdoc/>
 195        /// <remarks>
 196        /// This always returns "<see cref="Name"/> : <see cref="Type"/>" and is meant for debugging purposes.
 197        /// </remarks>
 0198        public override string ToString() => $"{Name} : {Type}";
 199    }
 200}