/// <summary> /// Searches for the specified query in all default search fields, and in the specified locale. /// </summary> /// <param name="search">The search to modify.</param> /// <param name="query">The query text to search for.</param> /// <param name="locale">The locale to search in.</param> /// <returns>The search, modified to include the requested query.</returns> public static ITypeSearch <FindDocument> ForDefaultFields(this ITypeSearch <FindDocument> search, string query, string locale) { if (!string.IsNullOrEmpty(query)) { ISearchConfiguration configuration = search.Client.GetConfiguration(); IQueriedSearch <FindDocument, QueryStringQuery> search1 = search.For <FindDocument>(query); Enumerable.Empty <IFieldConfiguration>(); foreach (IFieldConfiguration fieldConfiguration1 in !string.IsNullOrWhiteSpace(locale) ? configuration.GetDefaultFields(locale) : configuration.GetDefaultFields()) { if (fieldConfiguration1.Type == typeof(string)) { IFieldConfiguration <string> fieldConfiguration2 = (IFieldConfiguration <string>)fieldConfiguration1; search1 = search1.InField <FindDocument, QueryStringQuery>(fieldConfiguration2.TypedGetValueExpression, new double?()); } else if (fieldConfiguration1.Type == typeof(IEnumerable <string>)) { IFieldConfiguration <IEnumerable <string> > fieldConfiguration2 = (IFieldConfiguration <IEnumerable <string> >)fieldConfiguration1; search1 = search1.InField <FindDocument, QueryStringQuery>(fieldConfiguration2.TypedGetValueExpression, new double?()); } else if (fieldConfiguration1.Type == typeof(int?)) { IFieldConfiguration <int?> fieldConfiguration2 = (IFieldConfiguration <int?>)fieldConfiguration1; search1 = search1.InField <FindDocument, QueryStringQuery>(fieldConfiguration2.TypedGetValueExpression, new double?()); } else if (fieldConfiguration1.Type == typeof(int)) { IFieldConfiguration <int> fieldConfiguration2 = (IFieldConfiguration <int>)fieldConfiguration1; search1 = search1.InField <FindDocument, QueryStringQuery>(fieldConfiguration2.TypedGetValueExpression, new double?()); } else if (fieldConfiguration1.Type == typeof(double?) || fieldConfiguration1.Type == typeof(float?)) { IFieldConfiguration <double?> fieldConfiguration2 = (IFieldConfiguration <double?>)fieldConfiguration1; search1 = search1.InField <FindDocument, QueryStringQuery>(fieldConfiguration2.TypedGetValueExpression, new double?()); } else { if (!(fieldConfiguration1.Type == typeof(double)) && !(fieldConfiguration1.Type == typeof(float))) { throw new Exception(string.Format((IFormatProvider)CultureInfo.InvariantCulture, "Field of type {0} is not valid for the default search.", (object)fieldConfiguration1.Type.Name)); } IFieldConfiguration <double> fieldConfiguration2 = (IFieldConfiguration <double>)fieldConfiguration1; search1 = search1.InField <FindDocument, QueryStringQuery>(fieldConfiguration2.TypedGetValueExpression, new double?()); } } search = (ITypeSearch <FindDocument>)search1; } return(search); }