< Summary

Class:Azure.Search.Documents.SearchOptions
Assembly:Azure.Search.Documents
File(s):C:\Git\azure-sdk-for-net\sdk\search\Azure.Search.Documents\src\Generated\Models\SearchOptions.cs
C:\Git\azure-sdk-for-net\sdk\search\Azure.Search.Documents\src\Generated\Models\SearchOptions.Serialization.cs
C:\Git\azure-sdk-for-net\sdk\search\Azure.Search.Documents\src\Options\SearchOptions.cs
Covered lines:169
Uncovered lines:37
Coverable lines:206
Total lines:520
Line coverage:82% (169 of 206)
Covered branches:58
Total branches:78
Branch coverage:74.3% (58 of 78)

Metrics

MethodCyclomatic complexity Line coverage Branch coverage
.ctor()-100%100%
.ctor(...)-100%100%
get_HighlightPostTag()-100%100%
get_HighlightPreTag()-100%100%
get_MinimumCoverage()-100%100%
get_QueryType()-100%100%
get_ScoringProfile()-100%100%
get_SearchMode()-100%100%
get_Skip()-100%100%
Azure.Core.IUtf8JsonSerializable.Write(...)-88.33%89.47%
DeserializeSearchOptions(...)-60%60%
.ctor(...)-100%100%
get_SearchText()-100%100%
get_Filter()-100%100%
get_HighlightFields()-100%100%
get_HighlightFieldsRaw()-100%100%
set_HighlightFieldsRaw(...)-100%100%
get_SearchFields()-100%100%
get_SearchFieldsRaw()-100%100%
set_SearchFieldsRaw(...)-100%100%
get_Select()-100%100%
get_SelectRaw()-100%100%
set_SelectRaw(...)-100%100%
get_Size()-100%100%
get_OrderBy()-100%100%
get_OrderByRaw()-100%100%
set_OrderByRaw(...)-100%100%
get_IncludeTotalCount()-100%100%
get_Facets()-100%100%
get_ScoringParameters()-100%100%
Copy(...)-100%100%
Clone()-100%100%

File(s)

C:\Git\azure-sdk-for-net\sdk\search\Azure.Search.Documents\src\Generated\Models\SearchOptions.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 Azure.Core;
 10using Azure.Search.Documents.Models;
 11
 12namespace Azure.Search.Documents
 13{
 14    /// <summary> Parameters for filtering, sorting, faceting, paging, and other search query behaviors. </summary>
 15    public partial class SearchOptions
 16    {
 17        /// <summary> Initializes a new instance of SearchOptions. </summary>
 11718        public SearchOptions()
 19        {
 11720            Facets = new ChangeTrackingList<string>();
 11721            ScoringParameters = new ChangeTrackingList<string>();
 11722        }
 23
 24        /// <summary> Initializes a new instance of SearchOptions. </summary>
 25        /// <param name="includeTotalCount"> A value that specifies whether to fetch the total count of results. Default
 26        /// <param name="facets"> The list of facet expressions to apply to the search query. Each facet expression cont
 27        /// <param name="filter"> The OData $filter expression to apply to the search query. </param>
 28        /// <param name="highlightFieldsRaw"> The comma-separated list of field names to use for hit highlights. Only se
 29        /// <param name="highlightPostTag"> A string tag that is appended to hit highlights. Must be set with highlightP
 30        /// <param name="highlightPreTag"> A string tag that is prepended to hit highlights. Must be set with highlightP
 31        /// <param name="minimumCoverage"> A number between 0 and 100 indicating the percentage of the index that must b
 32        /// <param name="orderByRaw"> The comma-separated list of OData $orderby expressions by which to sort the result
 33        /// <param name="queryType"> A value that specifies the syntax of the search query. The default is &apos;simple&
 34        /// <param name="scoringParameters"> The list of parameter values to be used in scoring functions (for example, 
 35        /// <param name="scoringProfile"> The name of a scoring profile to evaluate match scores for matching documents 
 36        /// <param name="searchText"> A full-text search query expression; Use &quot;*&quot; or omit this parameter to m
 37        /// <param name="searchFieldsRaw"> The comma-separated list of field names to which to scope the full-text searc
 38        /// <param name="searchMode"> A value that specifies whether any or all of the search terms must be matched in o
 39        /// <param name="selectRaw"> The comma-separated list of fields to retrieve. If unspecified, all fields marked a
 40        /// <param name="skip"> The number of search results to skip. This value cannot be greater than 100,000. If you 
 41        /// <param name="size"> The number of search results to retrieve. This can be used in conjunction with $skip to 
 4242        internal SearchOptions(bool? includeTotalCount, IList<string> facets, string filter, string highlightFieldsRaw, 
 43        {
 4244            IncludeTotalCount = includeTotalCount;
 4245            Facets = facets;
 4246            Filter = filter;
 4247            HighlightFieldsRaw = highlightFieldsRaw;
 4248            HighlightPostTag = highlightPostTag;
 4249            HighlightPreTag = highlightPreTag;
 4250            MinimumCoverage = minimumCoverage;
 4251            OrderByRaw = orderByRaw;
 4252            QueryType = queryType;
 4253            ScoringParameters = scoringParameters;
 4254            ScoringProfile = scoringProfile;
 4255            SearchText = searchText;
 4256            SearchFieldsRaw = searchFieldsRaw;
 4257            SearchMode = searchMode;
 4258            SelectRaw = selectRaw;
 4259            Skip = skip;
 4260            Size = size;
 4261        }
 62        /// <summary> A string tag that is appended to hit highlights. Must be set with highlightPreTag. Default is &amp
 30963        public string HighlightPostTag { get; set; }
 64        /// <summary> A string tag that is prepended to hit highlights. Must be set with highlightPostTag. Default is &a
 30965        public string HighlightPreTag { get; set; }
 66        /// <summary> A number between 0 and 100 indicating the percentage of the index that must be covered by a search
 30967        public double? MinimumCoverage { get; set; }
 68        /// <summary> A value that specifies the syntax of the search query. The default is &apos;simple&apos;. Use &apo
 32569        public SearchQueryType? QueryType { get; set; }
 70        /// <summary> The name of a scoring profile to evaluate match scores for matching documents in order to sort the
 30571        public string ScoringProfile { get; set; }
 72        /// <summary> A value that specifies whether any or all of the search terms must be matched in order to count th
 30973        public SearchMode? SearchMode { get; set; }
 74        /// <summary> The number of search results to skip. This value cannot be greater than 100,000. If you need to sc
 36975        public int? Skip { get; set; }
 76    }
 77}

C:\Git\azure-sdk-for-net\sdk\search\Azure.Search.Documents\src\Generated\Models\SearchOptions.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;
 11using Azure.Search.Documents.Models;
 12
 13namespace Azure.Search.Documents
 14{
 15    public partial class SearchOptions : IUtf8JsonSerializable
 16    {
 17        void IUtf8JsonSerializable.Write(Utf8JsonWriter writer)
 18        {
 11519            writer.WriteStartObject();
 11520            if (Optional.IsDefined(IncludeTotalCount))
 21            {
 222                writer.WritePropertyName("count");
 223                writer.WriteBooleanValue(IncludeTotalCount.Value);
 24            }
 11525            if (Optional.IsCollectionDefined(Facets))
 26            {
 427                writer.WritePropertyName("facets");
 428                writer.WriteStartArray();
 4029                foreach (var item in Facets)
 30                {
 1631                    writer.WriteStringValue(item);
 32                }
 433                writer.WriteEndArray();
 34            }
 11535            if (Optional.IsDefined(Filter))
 36            {
 937                writer.WritePropertyName("filter");
 938                writer.WriteStringValue(Filter);
 39            }
 11540            if (Optional.IsDefined(HighlightFieldsRaw))
 41            {
 242                writer.WritePropertyName("highlight");
 243                writer.WriteStringValue(HighlightFieldsRaw);
 44            }
 11545            if (Optional.IsDefined(HighlightPostTag))
 46            {
 247                writer.WritePropertyName("highlightPostTag");
 248                writer.WriteStringValue(HighlightPostTag);
 49            }
 11550            if (Optional.IsDefined(HighlightPreTag))
 51            {
 252                writer.WritePropertyName("highlightPreTag");
 253                writer.WriteStringValue(HighlightPreTag);
 54            }
 11555            if (Optional.IsDefined(MinimumCoverage))
 56            {
 257                writer.WritePropertyName("minimumCoverage");
 258                writer.WriteNumberValue(MinimumCoverage.Value);
 59            }
 11560            if (Optional.IsDefined(OrderByRaw))
 61            {
 7562                writer.WritePropertyName("orderby");
 7563                writer.WriteStringValue(OrderByRaw);
 64            }
 11565            if (Optional.IsDefined(QueryType))
 66            {
 1067                writer.WritePropertyName("queryType");
 1068                writer.WriteStringValue(QueryType.Value.ToSerialString());
 69            }
 11570            if (Optional.IsCollectionDefined(ScoringParameters))
 71            {
 072                writer.WritePropertyName("scoringParameters");
 073                writer.WriteStartArray();
 074                foreach (var item in ScoringParameters)
 75                {
 076                    writer.WriteStringValue(item);
 77                }
 078                writer.WriteEndArray();
 79            }
 11580            if (Optional.IsDefined(ScoringProfile))
 81            {
 082                writer.WritePropertyName("scoringProfile");
 083                writer.WriteStringValue(ScoringProfile);
 84            }
 11585            if (Optional.IsDefined(SearchText))
 86            {
 11387                writer.WritePropertyName("search");
 11388                writer.WriteStringValue(SearchText);
 89            }
 11590            if (Optional.IsDefined(SearchFieldsRaw))
 91            {
 292                writer.WritePropertyName("searchFields");
 293                writer.WriteStringValue(SearchFieldsRaw);
 94            }
 11595            if (Optional.IsDefined(SearchMode))
 96            {
 297                writer.WritePropertyName("searchMode");
 298                writer.WriteStringValue(SearchMode.Value.ToSerialString());
 99            }
 115100            if (Optional.IsDefined(SelectRaw))
 101            {
 74102                writer.WritePropertyName("select");
 74103                writer.WriteStringValue(SelectRaw);
 104            }
 115105            if (Optional.IsDefined(Skip))
 106            {
 60107                writer.WritePropertyName("skip");
 60108                writer.WriteNumberValue(Skip.Value);
 109            }
 115110            if (Optional.IsDefined(Size))
 111            {
 46112                writer.WritePropertyName("top");
 46113                writer.WriteNumberValue(Size.Value);
 114            }
 115115            writer.WriteEndObject();
 115116        }
 117
 118        internal static SearchOptions DeserializeSearchOptions(JsonElement element)
 119        {
 42120            Optional<bool> count = default;
 42121            Optional<IList<string>> facets = default;
 42122            Optional<string> filter = default;
 42123            Optional<string> highlight = default;
 42124            Optional<string> highlightPostTag = default;
 42125            Optional<string> highlightPreTag = default;
 42126            Optional<double> minimumCoverage = default;
 42127            Optional<string> orderby = default;
 42128            Optional<SearchQueryType> queryType = default;
 42129            Optional<IList<string>> scoringParameters = default;
 42130            Optional<string> scoringProfile = default;
 42131            Optional<string> search = default;
 42132            Optional<string> searchFields = default;
 42133            Optional<SearchMode> searchMode = default;
 42134            Optional<string> select = default;
 42135            Optional<int> skip = default;
 42136            Optional<int> top = default;
 468137            foreach (var property in element.EnumerateObject())
 138            {
 192139                if (property.NameEquals("count"))
 140                {
 0141                    count = property.Value.GetBoolean();
 0142                    continue;
 143                }
 192144                if (property.NameEquals("facets"))
 145                {
 0146                    List<string> array = new List<string>();
 0147                    foreach (var item in property.Value.EnumerateArray())
 148                    {
 0149                        array.Add(item.GetString());
 150                    }
 0151                    facets = array;
 0152                    continue;
 153                }
 192154                if (property.NameEquals("filter"))
 155                {
 0156                    filter = property.Value.GetString();
 0157                    continue;
 158                }
 192159                if (property.NameEquals("highlight"))
 160                {
 0161                    highlight = property.Value.GetString();
 0162                    continue;
 163                }
 192164                if (property.NameEquals("highlightPostTag"))
 165                {
 0166                    highlightPostTag = property.Value.GetString();
 0167                    continue;
 168                }
 192169                if (property.NameEquals("highlightPreTag"))
 170                {
 0171                    highlightPreTag = property.Value.GetString();
 0172                    continue;
 173                }
 192174                if (property.NameEquals("minimumCoverage"))
 175                {
 0176                    minimumCoverage = property.Value.GetDouble();
 0177                    continue;
 178                }
 192179                if (property.NameEquals("orderby"))
 180                {
 42181                    orderby = property.Value.GetString();
 42182                    continue;
 183                }
 150184                if (property.NameEquals("queryType"))
 185                {
 0186                    queryType = property.Value.GetString().ToSearchQueryType();
 0187                    continue;
 188                }
 150189                if (property.NameEquals("scoringParameters"))
 190                {
 0191                    List<string> array = new List<string>();
 0192                    foreach (var item in property.Value.EnumerateArray())
 193                    {
 0194                        array.Add(item.GetString());
 195                    }
 0196                    scoringParameters = array;
 0197                    continue;
 198                }
 150199                if (property.NameEquals("scoringProfile"))
 200                {
 0201                    scoringProfile = property.Value.GetString();
 0202                    continue;
 203                }
 150204                if (property.NameEquals("search"))
 205                {
 42206                    search = property.Value.GetString();
 42207                    continue;
 208                }
 108209                if (property.NameEquals("searchFields"))
 210                {
 0211                    searchFields = property.Value.GetString();
 0212                    continue;
 213                }
 108214                if (property.NameEquals("searchMode"))
 215                {
 0216                    searchMode = property.Value.GetString().ToSearchMode();
 0217                    continue;
 218                }
 108219                if (property.NameEquals("select"))
 220                {
 42221                    select = property.Value.GetString();
 42222                    continue;
 223                }
 66224                if (property.NameEquals("skip"))
 225                {
 42226                    skip = property.Value.GetInt32();
 42227                    continue;
 228                }
 24229                if (property.NameEquals("top"))
 230                {
 24231                    top = property.Value.GetInt32();
 232                    continue;
 233                }
 234            }
 42235            return new SearchOptions(Optional.ToNullable(count), Optional.ToList(facets), filter.Value, highlight.Value,
 236        }
 237    }
 238}

C:\Git\azure-sdk-for-net\sdk\search\Azure.Search.Documents\src\Options\SearchOptions.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 System.Diagnostics;
 7using Azure.Core;
 8using Azure.Search.Documents.Models;
 9
 10namespace Azure.Search.Documents
 11{
 12    /// <summary>
 13    /// Options for <see cref="SearchClient.SearchAsync"/> that
 14    /// allow specifying filtering, sorting, faceting, paging, and other search
 15    /// query behaviors.
 16    /// </summary>
 17    [CodeGenModel("SearchRequest")]
 18    public partial class SearchOptions
 19    {
 20        /// <summary>
 21        /// Initializes a new instance of SearchOptions from a continuation
 22        /// token to continue fetching results from a previous search.
 23        /// </summary>
 24        /// <param name="continuationToken">
 25        /// Encapsulates the state required to fetch the next page of search
 26        /// results from the index.
 27        /// </param>
 1428        internal SearchOptions(string continuationToken) =>
 1429            Copy(SearchContinuationToken.Deserialize(continuationToken), this);
 30
 31        /// <summary>
 32        /// A full-text search query expression;  Use "*" or omit this
 33        /// parameter to match all documents.
 34        /// </summary>
 35        [CodeGenMember("search")]
 50336        internal string SearchText { get; set; }
 37
 38        /// <summary>
 39        /// The OData $filter expression to apply to the search query.  You can
 40        /// use <see cref="SearchFilter.Create(FormattableString)"/> to help
 41        /// construct the filter expression.
 42        /// </summary>
 43        [CodeGenMember("filter")]
 32344        public string Filter { get; set; }
 45
 46        /// <summary>
 47        /// The list of field names to use for hit highlights.  Only searchable
 48        /// fields can be used for hit highlighting.
 49        /// </summary>
 48250        public IList<string> HighlightFields { get; internal set; } = new List<string>();
 51
 52        #pragma warning disable CA1822 // Only (unused but required) setters are static
 53        /// <summary>
 54        /// Join HighlightFields so it can be sent as a comma separated string.
 55        /// </summary>
 56        [CodeGenMember("HighlightFields")]
 57        internal string HighlightFieldsRaw
 58        {
 11759            get => HighlightFields.CommaJoin();
 4260            set => HighlightFields = SearchExtensions.CommaSplit(value);
 61        }
 62        #pragma warning restore CA1822
 63
 64        /// <summary>
 65        /// The list of field names to which to scope the full-text search.
 66        /// When using fielded search (fieldName:searchExpression) in a full
 67        /// Lucene query, the field names of each fielded search expression
 68        /// take precedence over any field names listed in this parameter.
 69        /// </summary>
 48270        public IList<string> SearchFields { get; internal set; } = new List<string>();
 71
 72        #pragma warning disable CA1822 // Only (unused but required) setters are static
 73        /// <summary>
 74        /// Join SearchFields so it can be sent as a comma separated string.
 75        /// </summary>
 76        [CodeGenMember("searchFields")]
 77        internal string SearchFieldsRaw
 78        {
 11779            get => SearchFields.CommaJoin();
 4280            set => SearchFields = SearchExtensions.CommaSplit(value);
 81        }
 82        #pragma warning restore CA1822
 83
 84        /// <summary>
 85        /// The list of fields to retrieve.  If unspecified, all fields marked
 86        /// as retrievable in the schema are included.
 87        /// </summary>
 57088        public IList<string> Select { get; internal set; } = new List<string>();
 89
 90        #pragma warning disable CA1822 // Only (unused but required) setters are static
 91        /// <summary>
 92        /// Join Select so it can be sent as a comma separated string.
 93        /// </summary>
 94        [CodeGenMember("select")]
 95        internal string SelectRaw
 96        {
 18997            get => Select.CommaJoin();
 4298            set => Select = SearchExtensions.CommaSplit(value);
 99        }
 100        #pragma warning restore CA1822
 101
 102        /// <summary>
 103        /// The number of search results to retrieve. This can be used in
 104        /// conjunction with <see cref="Skip"/> to implement client-side
 105        /// paging of search results.  If results are truncated due to
 106        /// server-side paging, the response will include a continuation token
 107        /// that can be used to issue another Search request for the next page
 108        /// of results.
 109        /// </summary>
 110        [CodeGenMember("top")]
 363111        public int? Size { get; set; }
 112
 113        /// <summary>
 114        /// The list of OData $orderby expressions by which to sort the
 115        /// results. Each expression can be either a field name or a call to
 116        /// either the geo.distance() or the search.score() functions. Each
 117        /// expression can be followed by asc to indicate ascending, or desc to
 118        /// indicate descending. The default is ascending order. Ties will be
 119        /// broken by the match scores of documents. If no $orderby is
 120        /// specified, the default sort order is descending by document match
 121        /// score. There can be at most 32 $orderby clauses.
 122        /// </summary>
 570123        public IList<string> OrderBy { get; internal set; } = new List<string>();
 124
 125        #pragma warning disable CA1822 // Only (unused but required) setters are static
 126        /// <summary>
 127        /// Join OrderBy so it can be sent as a comma separated string.
 128        /// </summary>
 129        [CodeGenMember("orderby")]
 130        internal string OrderByRaw
 131        {
 190132            get => OrderBy.CommaJoin();
 42133            set => OrderBy = SearchExtensions.CommaSplit(value);
 134        }
 135        #pragma warning restore CA1822
 136
 137        /// <summary>
 138        /// A value that specifies whether to fetch the total count of results
 139        /// as the <see cref="Models.SearchResults{T}.TotalCount"/> property.
 140        /// The default value is false.  Setting this value to true may have a
 141        /// performance impact.  Note that the count returned is an
 142        /// approximation.
 143        /// </summary>
 144        [CodeGenMember("IncludeTotalResultCount")]
 309145        public bool? IncludeTotalCount { get; set; }
 146
 147        /// <summary>
 148        /// The list of facet expressions to apply to the search query. Each
 149        /// facet expression contains a field name, optionally followed by a
 150        /// comma-separated list of name:value pairs.
 151        /// </summary>
 152        [CodeGenMember("facets")]
 603153        public IList<string> Facets { get; internal set; } = new List<string>();
 154
 155        /// <summary>
 156        /// The list of parameter values to be used in scoring functions (for
 157        /// example, referencePointParameter) using the format name-values. For
 158        /// example, if the scoring profile defines a function with a parameter
 159        /// called &apos;mylocation&apos; the parameter string would be
 160        /// &quot;mylocation--122.2,44.8&quot; (without the quotes).
 161        /// </summary>
 162        [CodeGenMember("scoringParameters")]
 595163        public IList<string> ScoringParameters { get; internal set; } = new List<string>();
 164
 165        /// <summary>
 166        /// Shallow copy one SearchOptions instance to another.
 167        /// </summary>
 168        /// <param name="source">The source options.</param>
 169        /// <param name="destination">The destination options.</param>
 170        private static void Copy(SearchOptions source, SearchOptions destination)
 171        {
 172            Debug.Assert(source != null);
 173            Debug.Assert(destination != null);
 174
 74175            destination.SearchText = source.SearchText;
 74176            destination.Filter = source.Filter;
 74177            destination.HighlightFields = source.HighlightFields;
 74178            destination.SearchFields = source.SearchFields;
 74179            destination.Select = source.Select;
 74180            destination.Size = source.Size;
 74181            destination.OrderBy = source.OrderBy;
 74182            destination.IncludeTotalCount = source.IncludeTotalCount;
 74183            destination.Facets = source.Facets;
 74184            destination.ScoringParameters = source.ScoringParameters;
 74185            destination.HighlightPostTag = source.HighlightPostTag;
 74186            destination.HighlightPreTag = source.HighlightPreTag;
 74187            destination.MinimumCoverage = source.MinimumCoverage;
 74188            destination.QueryType = source.QueryType;
 74189            destination.ScoringProfile = source.ScoringProfile;
 74190            destination.SearchMode = source.SearchMode;
 74191            destination.Skip = source.Skip;
 74192        }
 193
 194        /// <summary>
 195        /// Creates a shallow copy of the SearchOptions.
 196        /// </summary>
 197        /// <returns>The cloned SearchOptions.</returns>
 198        internal SearchOptions Clone()
 199        {
 60200            SearchOptions clone = new SearchOptions();
 60201            Copy(this, clone);
 60202            return clone;
 203        }
 204    }
 205}