// Displays a search interface, listing search results from the entire index public IActionResult Index() { // Prepares a list of filter queries for the search request IList <string> filterQueries = InitializeFilterQueries(); // Configures the 'SearchParameters' object Microsoft.Azure.Search.Models.SearchParameters searchParams = ConfigureSearchParameters(filterQueries); // Returns all results on initial page load string searchString = "*"; // Prepares a view model used to hold the search results and search configuration AzureSearchViewModel model = new AzureSearchViewModel(); // Performs a search request on the specified Azure Search index with the configured 'SearchParameters' object DocumentSearchResult <Document> result = searchIndexClient.Documents.Search(searchString, searchParams); // Fills the corresponding view model with facets retrieved from the search query if (result.Facets != null) { foreach (var facet in result.Facets.Take(5)) { foreach (FacetResult value in facet.Value) { AddFacet(model, value, facet.Key); } } } // Fills the view model with search results and displays them in a corresponding view return(View("SearchIndex", PrepareSearchResultsViewModel(result, model))); }
private static SearchResults SearchDocuments(string searchText, string filter, string orderBy, int page = 1, int pageSize = 10) { var sp = new SearchParameters(); if (!string.IsNullOrEmpty(filter)) { sp.Filter = filter; } sp.Top = pageSize; sp.Skip = (page - 1) * pageSize; if (!string.IsNullOrEmpty(orderBy)) { sp.OrderBy = orderBy.Split(','); } var results = indexClient.Documents.Search(searchText, sp); var model = new SearchResults() { }; model.Entries = results.Select(x=>new Entry(){ id = (string)x.Document["id"], Descripcion = (string)x.Document["Descripcion"], Fecha = ((DateTimeOffset)x.Document["Fecha"]).DateTime, Imagen = (string)x.Document["Imagen"], Lenguajes = (string)x.Document["Lenguajes"], PublisherId = (string)x.Document["PublisherId"], PublisherImagen = (string)x.Document["PublisherImagen"], PublisherNombre = (string)x.Document["PublisherNombre"], Tags = ((string[])x.Document["Tags"]).ToList(), Tipo = (string)x.Document["Tipo"], Titulo = (string)x.Document["Titulo"], Url = (string)x.Document["Url"] }).ToList(); model.Count = model.Entries.Count(); return model; }
private static SearchParameters BuildSearchParameters(double? retweetCountFrom, double? retweetCountTo, string sort, string filter, string hashTags, string username, int top, int skip, string scoringProfile, string scoringParameter) { var sp = new SearchParameters { Top = top, Facets = new List<string> { "RetweetCount,values:10 | 25 | 50 | 100 | 250 | 1000", "HashTags", //"temperature, values:-20 | 0 | 20 | | 40", //"cloudiness, values: 0 | 25 | 50 | 75 | 100" }, OrderBy = new List<string> {sort}, Filter = BuildSearchParameterFilter(retweetCountFrom, retweetCountTo, filter, hashTags, username), Skip = skip, IncludeTotalResultCount = true }; if (!IsNullOrEmpty(scoringProfile)) { sp.ScoringProfile = scoringProfile; if (!IsNullOrEmpty(scoringParameter)) { sp.ScoringParameters = new List<string> { scoringParameter }; } } return sp; }
/// <summary> /// Returns search parameters based on given <paramref name="filter"/>. /// </summary> /// <param name="filter">Query used to filter indexed items.</param> private SearchParameters GetSearchParameters(string filter) { var searchparams = new SearchParameters { Facets = Facets, Filter = filter, HighlightFields = new List <string> { "skuname" }, HighlightPreTag = "<strong>", HighlightPostTag = "</strong>", IncludeTotalResultCount = true }; if (drplstOrderBy.SelectedItem != null && drplstOrderByAscDesc.SelectedItem != null) { searchparams.OrderBy = new[] { $"{drplstOrderBy.SelectedValue} {drplstOrderByAscDesc.SelectedValue}" }; } else { searchparams.OrderBy = new[] { "skuname asc" }; } return(searchparams); }
public ActionResult Search(string search) { try { DocumentSearchResponse<DocumentProperties> response; string filter; if (search.LastIndexOf('*') != search.Length - 1) search += "*"; if (search == "docx*") { filter = "content_type eq 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'"; var sp = new SearchParameters(); sp.Filter = filter; search = "*"; response = _searchIndexClient.Documents.Search<DocumentProperties>(search, sp); } else { response = _searchIndexClient.Documents.Search<DocumentProperties>(search); } var r = response.Results; JavaScriptSerializer serializer = new JavaScriptSerializer(); var content = serializer.Serialize(r); return Content(content); } catch (Exception e) { System.Diagnostics.Debug.WriteLine(e.Message); return null; } }
public DocumentSearchResponse Search(string searchText, string countyFacet) { // Execute search based on query string try { SearchParameters sp = new SearchParameters() { SearchMode = SearchMode.All, // Limit results Select = new List<String>() {"FEATURE_ID", "FEATURE_NAME", "FEATURE_CLASS", "STATE_ALPHA", "COUNTY_NAME", "ELEV_IN_M", "ELEV_IN_FT", "MAP_NAME", "LOCATION", "DESCRIPTION", "HISTORY"}, // Add count IncludeTotalResultCount = true, // Add search highlights HighlightFields = new List<String>() { "DESCRIPTION" }, HighlightPreTag = "<b>", HighlightPostTag = "</b>", // Add facets Facets = new List<String>() { "COUNTY_NAME", "ELEV_IN_FT,interval:50" }, ScoringProfile = "usgsScoring" }; // Add filtering if (countyFacet != "") sp.Filter = "COUNTY_NAME eq '" + countyFacet + "'"; return _indexClient.Documents.Search(searchText, sp); } catch (Exception ex) { Console.WriteLine("Error querying index: {0}\r\n", ex.Message.ToString()); } return null; }
public DocumentSearchResponse GetProductIDs(JArray relatedItems) { // Execute search to find all the related products try { SearchParameters sp = new SearchParameters() { SearchMode = SearchMode.Any, // Limit results Select = new List<String>() {"product_id","brand_name","product_name","srp","net_weight","recyclable_package", "low_fat","units_per_case","product_subcategory","product_category","product_department","url", "recommendations"}, }; // Filter based on the product ID's string productIdFilter = null; foreach (var item in relatedItems) { productIdFilter += "product_id eq '" + item.ToString() + "' or "; } productIdFilter = productIdFilter.Substring(0, productIdFilter.Length - 4); sp.Filter = productIdFilter; return _indexClient.Documents.Search("*", sp); } catch (Exception ex) { Console.WriteLine("Error querying index: {0}\r\n", ex.Message.ToString()); } return null; }
public void AllOptionsPropagatedToQueryString() { var parameters = new SearchParameters() { IncludeTotalResultCount = true, Facets = new[] { "field,option:value" }, Filter = "field eq value", HighlightFields = new[] { "field1", "field2" }, HighlightPreTag = "<b>", HighlightPostTag = "</b>", OrderBy = new[] { "field1 asc", "field2 desc" }, ScoringParameters = new[] { "name:value" }, ScoringProfile = "myprofile", SearchFields = new[] { "field1", "field2" }, SearchMode = SearchMode.All, Select = new[] { "field1", "field2" }, Skip = 10, Top = 5 }; const string ExpectedQueryString = "$count=true&facet=field%2Coption%3Avalue&$filter=field%20eq%20value&highlight=field1,field2&" + "highlightPreTag=%3Cb%3E&highlightPostTag=%3C%2Fb%3E&$orderby=field1 asc,field2 desc&" + "scoringParameter=name:value&scoringProfile=myprofile&searchFields=field1,field2&searchMode=all&" + "$select=field1,field2&$skip=10&$top=5"; Assert.Equal(ExpectedQueryString, parameters.ToString()); }
public async Task<DocumentSearchResponse<ProductInfo>> SearchAsync(string searchText, string color, string category, string subcategory, double? priceFrom, double? priceTo, string sort, int page) { if (string.IsNullOrWhiteSpace(searchText)) searchText = "*"; var parameters = new SearchParameters { SearchMode = SearchMode.All, HighlightFields = new List<string> { "Name", "Description" }, HighlightPreTag = "<b>", HighlightPostTag = "</b>", IncludeTotalResultCount = true, Top = Constants.PageSize, Skip = (page - 1) * Constants.PageSize, Facets = new List<string> { "Color", "ListPrice,values:10|25|100|500|1000|2500", "Subcategory", "Category" } }; var filter = BuildFilter(color, category, subcategory, priceFrom, priceTo); if (!string.IsNullOrEmpty(filter)) parameters.Filter = filter; if (!string.IsNullOrWhiteSpace(sort)) parameters.OrderBy = new List<string> { sort }; var result = await indexClient.Documents.SearchAsync<ProductInfo>(searchText, parameters); return result.StatusCode != HttpStatusCode.OK ? null : result; }
public static async Task<IEnumerable<ItemViewModel>> SearchAsync(string searchString) { var searchParameters = new SearchParameters() { Filter = "FEATURE_CLASS eq 'Trail'" }; return await DoSearchAsync(searchString, searchParameters); }
/// <summary> /// Gets the transaction item(s) matching the mva number and ID from search index. /// Can return multiple items if transaction Amount > 1. /// </summary> /// <param name="mvanumber"></param> /// <param name="id"></param> /// <returns></returns> public List<TransactionSearchItem> GetTransactionById(int mvanumber, Guid id) { string filters = string.Format("mvaNumber eq {0} and tableStoreRowID eq '{1}'", mvanumber, id); var sp = new SearchParameters(); sp.Top = 1000; sp.Filter = filters; DocumentSearchResult<TransactionSearchItem> response = TransactionIndexClient.Documents.Search<TransactionSearchItem>("*", sp); return response.Results.Select(r => r.Document).ToList(); }
private static async Task<IEnumerable<ItemViewModel>> DoSearchAsync(string searchString, SearchParameters parameters) { List<ItemViewModel> searchResults = new List<ItemViewModel>(); using (var indexClient = new SearchIndexClient(ServiceName, IndexName, new SearchCredentials(QueryKey))) { var response = await indexClient.Documents.SearchAsync<ItemViewModel>(searchString, parameters); searchResults.AddRange(response.Results.Select(result => result.Document)); } return searchResults; }
public static async Task<IEnumerable<ItemViewModel>> SearchAsync(string searchString, string filter = null) { var searchParameters = new SearchParameters() { Filter = CreateFilter(filter), Facets = new[] { FacetName } }; return await DoSearchAsync(searchString, searchParameters); }
public ICollection<Base> Search(string query) { var resultSearch = new Collection<Base>(); var searchParameters = new SearchParameters(); DocumentSearchResponse<Base> response = indexClient.Documents.Search<Base>(query, searchParameters); foreach (var result in response) { resultSearch.Add(result.Document); } return resultSearch; }
public DocumentSearchResponse Search(string searchText) { // Execute search based on query string try { SearchParameters sp = new SearchParameters() { SearchMode = SearchMode.All }; return _indexClient.Documents.Search(searchText, sp); } catch (Exception ex) { Console.WriteLine("Error querying index: {0}\r\n", ex.Message.ToString()); } return null; }
public void SomeCollectionParametersRepeat() { var parameters = new SearchParameters() { Facets = new[] { "field,option:value", "field2,option2:value2" }, ScoringParameters = new[] { "name:value", "name2:value2" } }; const string ExpectedQueryString = "$count=false&facet=field%2Coption%3Avalue&facet=field2%2Coption2%3Avalue2&" + "scoringParameter=name:value&scoringParameter=name2:value2&searchMode=any"; Assert.Equal(ExpectedQueryString, parameters.ToString()); }
public void Delete(IIndexableId id) { var searchParams = new SearchParameters(); searchParams.SearchFields = new List<string>(); searchParams.SearchFields.Add("s_group"); searchParams.Select = new List<string>(); searchParams.Select.Add("s_key"); var resultTask = AzureIndex.AzureIndexClient.Documents.SearchWithHttpMessagesAsync(id.ToString(), searchParams); resultTask.Wait(); var results = resultTask.Result.Body.Results; foreach (var result in results) { Commit(IndexAction.Delete(result.Document)); } }
public static async Task<IEnumerable<ItemViewModel>> GeoSearchAsync(Geocoordinate coordinate) { var position = coordinate.Point.Position; var orderByFilter = $"geo.distance(LOCATION, geography'POINT({position.Longitude} {position.Latitude})')"; var searchParameters = new SearchParameters() { Filter = "FEATURE_CLASS eq 'Trail'", OrderBy = new[] { orderByFilter } }; return await DoSearchAsync("*", searchParameters); }
public IActionResult Search(AzureSearchViewModel searchSettings) { // Prepares a list of filter queries for the search request IList <string> filterQueries = InitializeFilterQueries(); // Adds filter queries based on the selected options in the faceted navigation (coffee farm and region) IEnumerable <FacetViewModel> selectedCountries = searchSettings.FilterCountry?.Where(x => x.Selected); IEnumerable <FacetViewModel> selectedFarms = searchSettings.FilterFarm?.Where(x => x.Selected); if (selectedCountries.Any()) { filterQueries.Add(GetFilterQuery(selectedCountries, FACET_COFFEE_COUNTRY)); } if (selectedFarms.Any()) { filterQueries.Add(GetFilterQuery(selectedFarms, FACET_COFFEE_FARM)); } // Prepares the search parameters Microsoft.Azure.Search.Models.SearchParameters searchParams = ConfigureSearchParameters(filterQueries); // Gets the search text from the input string searchString = searchSettings.SearchString; // Performs the search request for the specified Azure Search index and parameters DocumentSearchResult <Document> result = searchIndexClient.Documents.Search(searchString, searchParams); // Fills or updates the faceted navigation options if (result.Facets != null) { foreach (FacetViewModel item in searchSettings.FilterCountry) { UpdateFacets(result.Facets[FACET_COFFEE_COUNTRY], item); } foreach (FacetViewModel item in searchSettings.FilterFarm) { UpdateFacets(result.Facets[FACET_COFFEE_FARM], item); } } // Displays the search results return(View("SearchIndex", PrepareSearchResultsViewModel(result, searchSettings))); }
// Configures the 'SearchParameters' object private Microsoft.Azure.Search.Models.SearchParameters ConfigureSearchParameters(IList <string> filterQueries) { var searchParams = new Microsoft.Azure.Search.Models.SearchParameters { Facets = Facets, Filter = String.Join(" and ", filterQueries), HighlightPreTag = "<strong>", HighlightPostTag = "</strong>", // All fields used for text highlighting must be configured as 'searchable' HighlightFields = new List <string> { FACET_COFFEE_COUNTRY, FACET_COFFEE_FARM, "skushortdescription", "skuname" } }; return(searchParams); }
static void Main(string[] args) { //URL: https://.....search.windows.net //Key: //Index: string outFile = ""; string searchServiceName = ""; string queryApiKey = ""; string indexName = ""; string query = "my query"; SearchIndexClient indexClient = new SearchIndexClient(searchServiceName, indexName, new SearchCredentials(queryApiKey)); var parameters = new Microsoft.Azure.Search.Models.SearchParameters() { Select = new[] { "Content" }, Top = 10000 }; var results = indexClient.Documents.Search <Doc>(query); int c = 0; using (var sw = new StreamWriter(outFile)) { foreach (SearchResult <Doc> r in results.Results) { var text = r.Document.Content; if (text.Length > 100) { text = Regex.Replace(text, "[^A-Za-z.]", " "); text = Regex.Replace(text, "\\s+", " "); sw.WriteLine(text.ToLower()); Console.WriteLine(++c); } } } Console.ReadLine(); }
public static void SearchDocuments(SearchIndexClient indexClient, string searchText) { // Search using the supplied searchText and output documents that match try { var sp = new SearchParameters(); DocumentSearchResult<OCRTextIndex> response = indexClient.Documents.Search<OCRTextIndex>(searchText, sp); foreach (SearchResult<OCRTextIndex> result in response.Results) { Console.WriteLine("File ID: {0}", result.Document.fileId); Console.WriteLine("File Name: {0}", result.Document.fileName); Console.WriteLine("Extracted Text: {0}", result.Document.ocrText); } } catch (Exception e) { Console.WriteLine("Failed search: {0}", e.Message.ToString()); } }
public static async Task<IEnumerable<ItemViewModel>> GeoSearchAsync(Geocoordinate coordinate, string filter = null) { var position = coordinate.Point.Position; var orderByFilter = $"geo.distance(LOCATION, geography'POINT({position.Longitude} {position.Latitude})')"; var searchParameters = new SearchParameters() { Filter = CreateFilter(filter), OrderBy = new[] { orderByFilter }, Facets = new[] { FacetName } }; return await DoSearchAsync("*", searchParameters); }
public DocumentSearchResponse Search(string searchText, string fiterField, string filter) { // Execute search based on query string try { SearchParameters sp = new SearchParameters() { SearchMode = SearchMode.All, // Add count IncludeTotalResultCount = true, // Add search highlights //HighlightFields = new List<String>() { "CompanyName", "FirstName", "LastName" }, //HighlightPreTag = "<b><u>", //HighlightPostTag = "</u></b>", // Add facets Facets = new List<String>() { "CompanyName", "SalesPerson", "City", "ProductNames" }, //ScoringProfile = "awScoring" }; // Add Filter if ((fiterField != "") && (filter != "")) { if (fiterField == "ProductName") // Apply an ANY filter to the collection sp.Filter = "ProductNames/any(t: t eq '" + Uri.UnescapeDataString(filter) + "' )"; else // Use a simple EQ filter sp.Filter = fiterField + " eq '" + Uri.UnescapeDataString(filter) + "'"; } return _indexClient.Documents.Search(searchText, sp); } catch (Exception ex) { Console.WriteLine("Error querying index: {0}\r\n", ex.Message.ToString()); } return null; }
public IEnumerable<DocumentProperties> SearchbyName(string name) { try { DocumentSearchResponse<DocumentProperties> response; string filter; if (name == "#@!") name = "*"; if (name.LastIndexOf('*') != name.Length - 1) name += "*"; if (name == "docx*") { filter = "content_type eq 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'"; var sp = new SearchParameters(); sp.Filter = filter; sp.OrderBy = new List<string>(); sp.OrderBy.Add("name"); name = "*"; response = _searchIndexClient.Documents.Search<DocumentProperties>(name, sp); } else { response = _searchIndexClient.Documents.Search<DocumentProperties>(name); } List<DocumentProperties> documents = new List<DocumentProperties>(); foreach (var r in response.Results) documents.Add(r.Document); return documents; } catch (Exception e) { System.Diagnostics.Debug.WriteLine(e.Message); return null; } }
public IHttpActionResult Analyze(EmailMessageForm form) { if (form != null && !string.IsNullOrEmpty(form.Subject)) { string searchServiceName = ConfigurationManager.AppSettings["Azure.Search.ServiceName"]; string apiKey = ConfigurationManager.AppSettings["Azure.Search.Key"]; SearchServiceClient serviceClient = new SearchServiceClient(searchServiceName, new SearchCredentials(apiKey)); SearchIndexClient indexClient = serviceClient.Indexes.GetClient(ConfigurationManager.AppSettings["Azure.Search.Index"]); int maxResults = 25; if (Int32.TryParse(ConfigurationManager.AppSettings["Azure.Search.MaxResults"], out maxResults)) { if (maxResults < 0) { maxResults = 25; } } var sp = new SearchParameters(); sp.Top = maxResults; DocumentSearchResult<SearchResultDto> response = indexClient.Documents.Search<SearchResultDto>(form.Subject, sp); List<AnswerDto> answers = new List<AnswerDto>(); foreach (var result in response.Results) { answers.Add(new AnswerDto { Title = result.Document.Title, URL = result.Document.URL }); } return Ok(answers); } return NotFound(); }
public async Task <IList <Movie> > SearchMovies(Interfaces.Model.SearchParameters searchParameters) { Microsoft.Azure.Search.Models.SearchParameters parameters; DocumentSearchResult <Movie> results; IList <Movie> resultSet = new List <Movie>(); resultSet = await GetMovieFromCache(searchParameters.SearchTerm); if (resultSet == null || !resultSet.Any()) { resultSet = new List <Movie>(); ISearchIndexClient indexClientForQueries = await _searchProvider.CreateSearchIndexAsync(_searchServiceName, _adminApiKey, _indexName); parameters = new Microsoft.Azure.Search.Models.SearchParameters() { Select = searchParameters.Select, Filter = searchParameters.Filter, OrderBy = searchParameters.OrderBy, Top = searchParameters.Top, }; results = await indexClientForQueries.Documents.SearchAsync <Movie>(searchParameters.SearchTerm, parameters); results.Results.ToList().ForEach(i => { resultSet.Add(i.Document); }); StoreSeachCache(searchParameters.SearchTerm, resultSet); } return(resultSet); }
public DocumentSearchResponse SearchIndex(string searchText, string departmentFacet, string categoryFacet, string priceFacet, string lowFatFacet, string sortType, int currentPage) { // Execute search based on query string try { SearchParameters sp = new SearchParameters() { SearchMode = SearchMode.Any, Top = 10, Skip = currentPage-1, // Limit results Select = new List<String>() {"product_id","brand_name","product_name","srp","net_weight","recyclable_package", "low_fat","units_per_case","product_subcategory","product_category","product_department","url", "recommendations"}, // Add count IncludeTotalResultCount = true, // Add facets Facets = new List<String>() { "low_fat", "product_category", "product_department", "srp,interval:1" }, }; // Define the sort type if (sortType == "priceDesc") sp.OrderBy = new List<String>() { "srp desc" }; else if (sortType == "priceIncr") sp.OrderBy = new List<String>() { "srp" }; // Add filtering string filter = null; if (categoryFacet != "") filter = "product_category eq '" + categoryFacet + "'"; if (departmentFacet != "") { if (filter != null) filter += " and "; filter += "product_department eq '" + departmentFacet + "'"; } if (lowFatFacet != "") { if (filter != null) filter += " and "; filter += "low_fat eq '" + lowFatFacet + "'"; } if (priceFacet != "") { if (filter != null) filter += " and "; filter += "srp ge " + priceFacet+ " and srp lt " + (Convert.ToInt32(priceFacet) + 1).ToString(); } sp.Filter = filter; return _indexClient.Documents.Search(searchText, sp); } catch (Exception ex) { Console.WriteLine("Error querying index: {0}\r\n", ex.Message.ToString()); } return null; }
public void MissingParametersAreMissingInThePayload() { var parameters = new SearchParameters(); // Search text can never be null. SearchParametersPayload payload = parameters.ToPayload("*"); Assert.True(payload.Count.HasValue); Assert.False(payload.Count.Value); // IncludeTotalCount is non-nullable in the client contract. Assert.NotNull(payload.Facets); Assert.False(payload.Facets.Any()); Assert.Null(payload.Filter); Assert.Null(payload.Highlight); Assert.Null(payload.HighlightPostTag); Assert.Null(payload.HighlightPreTag); Assert.Null(payload.MinimumCoverage); Assert.Null(payload.OrderBy); Assert.NotNull(payload.ScoringParameters); Assert.False(payload.ScoringParameters.Any()); Assert.Null(payload.ScoringProfile); Assert.Equal("*", payload.Search); Assert.Null(payload.SearchFields); Assert.True(payload.SearchMode.HasValue); Assert.Equal(SearchMode.Any, payload.SearchMode.Value); // SearchMode is non-nullable in the client contract. Assert.Null(payload.Select); Assert.Null(payload.Skip); Assert.Null(payload.Top); }
public void CanConvertToPostPayload() { var parameters = new SearchParameters() { Facets = new[] { "abc", "efg" }, Filter = "x eq y", HighlightFields = new[] { "a", "b" }, HighlightPostTag = "</em>", HighlightPreTag = "<em>", IncludeTotalResultCount = true, MinimumCoverage = 33.3, OrderBy = new[] { "a", "b desc" }, ScoringParameters = new[] { "a:b", "c:d" }, ScoringProfile = "xyz", SearchFields = new[] { "a", "b", "c" }, SearchMode = SearchMode.All, Select = new[] { "e", "f", "g" }, Skip = 10, Top = 5 }; SearchParametersPayload payload = parameters.ToPayload("find me"); Assert.True(parameters.Facets.SequenceEqual(payload.Facets)); Assert.Equal(parameters.Filter, payload.Filter); Assert.Equal(parameters.HighlightFields.ToCommaSeparatedString(), payload.Highlight); Assert.Equal(parameters.HighlightPostTag, payload.HighlightPostTag); Assert.Equal(parameters.HighlightPreTag, payload.HighlightPreTag); Assert.Equal(parameters.IncludeTotalResultCount, payload.Count); Assert.Equal(parameters.MinimumCoverage, payload.MinimumCoverage); Assert.Equal(parameters.OrderBy.ToCommaSeparatedString(), payload.OrderBy); Assert.True(parameters.ScoringParameters.SequenceEqual(payload.ScoringParameters)); Assert.Equal(parameters.ScoringProfile, payload.ScoringProfile); Assert.Equal("find me", payload.Search); Assert.Equal(parameters.SearchFields.ToCommaSeparatedString(), payload.SearchFields); Assert.Equal(parameters.SearchMode, payload.SearchMode); Assert.Equal(parameters.Select.ToCommaSeparatedString(), payload.Select); Assert.Equal(parameters.Skip, payload.Skip); Assert.Equal(parameters.Top, payload.Top); }
public DocumentSearchResult Search(string searchText, string businessTitleFacet, string postingTypeFacet, string salaryRangeFacet, string sortType, double lat, double lon, int currentPage, int maxDistance, string maxDistanceLat, string maxDistanceLon) { // Execute search based on query string try { SearchParameters sp = new SearchParameters() { SearchMode = SearchMode.Any, Top = 10, Skip = currentPage - 1, // Limit results Select = new List<String>() {"id", "agency", "posting_type", "num_of_positions", "business_title", "salary_range_from", "salary_range_to", "salary_frequency", "work_location", "job_description", "posting_date", "geo_location", "tags"}, // Add count IncludeTotalResultCount = true, // Add search highlights HighlightFields = new List<String>() { "job_description" }, HighlightPreTag = "<b>", HighlightPostTag = "</b>", // Add facets Facets = new List<String>() { "business_title", "posting_type", "level", "salary_range_from,interval:50000" }, }; // Define the sort type if (sortType == "featured") { sp.ScoringProfile = "jobsScoringFeatured"; // Use a scoring profile sp.ScoringParameters = new List<ScoringParameter>(); sp.ScoringParameters.Add(new ScoringParameter("featuredParam", new[] { "featured" })); sp.ScoringParameters.Add(new ScoringParameter("mapCenterParam", GeographyPoint.Create(lon, lat))); } else if (sortType == "salaryDesc") sp.OrderBy = new List<String>() { "salary_range_from desc" }; else if (sortType == "salaryIncr") sp.OrderBy = new List<String>() { "salary_range_from" }; else if (sortType == "mostRecent") sp.OrderBy = new List<String>() { "posting_date desc" }; // Add filtering string filter = null; if (businessTitleFacet != "") filter = "business_title eq '" + businessTitleFacet + "'"; if (postingTypeFacet != "") { if (filter != null) filter += " and "; filter += "posting_type eq '" + postingTypeFacet + "'"; } if (salaryRangeFacet != "") { if (filter != null) filter += " and "; filter += "salary_range_from ge " + salaryRangeFacet + " and salary_range_from lt " + (Convert.ToInt32(salaryRangeFacet) + 50000).ToString(); } if (maxDistance > 0) { if (filter != null) filter += " and "; filter += "geo.distance(geo_location, geography'POINT(" + maxDistanceLon + " " + maxDistanceLat + ")') le " + maxDistance.ToString(); } sp.Filter = filter; return _indexClient.Documents.Search(searchText, sp); } catch (Exception ex) { Console.WriteLine("Error querying index: {0}\r\n", ex.Message.ToString()); } return null; }
public DocumentSearchResult SearchZip(string zipCode) { // Execute search based on query string try { SearchParameters sp = new SearchParameters() { SearchMode = SearchMode.All, Top = 1, }; return _indexZipClient.Documents.Search(zipCode, sp); } catch (Exception ex) { Console.WriteLine("Error querying index: {0}\r\n", ex.Message.ToString()); } return null; }
private static void SearchDocuments(SearchIndexClient indexClient, string searchText, string filter = null) { // Execute search based on search text and optional filter var sp = new SearchParameters(); if (!String.IsNullOrEmpty(filter)) { sp.Filter = filter; } DocumentSearchResponse<Hotel> response = indexClient.Documents.Search<Hotel>(searchText, sp); foreach (SearchResult<Hotel> result in response) { Console.WriteLine(result.Document); } }
public void SelectStarPropagatesToQueryString() { var parameters = new SearchParameters() { Select = new[] { "*" } }; Assert.Equal("$count=false&searchMode=any&$select=*", parameters.ToString()); }
public DocumentSearchResponse Search(string searchText, bool blnHighlights, bool blnFacets, bool blnScore, string strFilter, string strScoringProfile) { // Execute search based on query string try { //Build the SearchParameter object SearchParameters sp = new SearchParameters(); sp.SearchMode = SearchMode.All; //Check if highlights should be returned if (blnHighlights) { sp.HighlightFields = new List<string> { "QuoteAuthor", "QuoteText" }; sp.HighlightPreTag = "<span class='highlight'>"; sp.HighlightPostTag = "</span>"; } //Check if facets shoudl be returned if (blnFacets) { sp.Facets = new List<string> { "QuoteAuthor" }; } //Check if the results should be filtered if (strFilter != "") { sp.Filter = "QuoteAuthor eq '" + strFilter + "'"; } //Check if there is a scoring profile specified if(strScoringProfile != "") { sp.ScoringProfile = strScoringProfile; } return _indexClient.Documents.Search(searchText, sp); } catch (Exception ex) { Console.WriteLine("Error querying index: {0}\r\n", ex.Message.ToString()); } return null; }
public void AllOpenStringParametersAreEscaped() { const string UnescapedString = "a+%=@#b"; const string EscapedString = "a%2B%25%3D%40%23b"; var parameters = new SearchParameters() { Filter = UnescapedString, HighlightPreTag = UnescapedString, HighlightPostTag = UnescapedString, Facets = new[] { UnescapedString } }; const string ExpectedQueryStringFormat = "$count=false&facet={0}&$filter={0}&highlightPreTag={0}&highlightPostTag={0}&searchMode=any"; Assert.Equal(String.Format(ExpectedQueryStringFormat, EscapedString), parameters.ToString()); }
/// <summary> /// Creates a new <c cref="SearchContinuationToken">SearchContinuationToken</c> for test purposes. /// </summary> /// <param name="nextLink">The @odata.nextLink of the continuation token.</param> /// <param name="searchText">Optional; The search text of the request represented by this token.</param> /// <param name="searchParameters">Optional; Search parameters of the request represented by this token.</param> /// <returns>A new continuation token for test purposes only.</returns> public static SearchContinuationToken CreateTestToken(string nextLink, string searchText, SearchParameters searchParameters) => new SearchContinuationToken(nextLink, searchParameters?.ToRequest(searchText));