public Task <AzureOperationResponse <AutocompleteResult> > AutocompleteWithHttpMessagesAsync( string searchText, string suggesterName, AutocompleteParameters autocompleteParameters = null, SearchRequestOptions searchRequestOptions = default(SearchRequestOptions), Dictionary <string, List <string> > customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)) { if (Client.UseHttpGetForQueries) { return(Client.DocumentsProxy.AutocompleteGetWithHttpMessagesAsync( searchText, suggesterName, searchRequestOptions, autocompleteParameters, customHeaders, cancellationToken)); } else { return(Client.DocumentsProxy.AutocompletePostWithHttpMessagesAsync( autocompleteParameters.ToRequest(searchText, suggesterName), searchRequestOptions, customHeaders, cancellationToken)); } }
public void CanConvertToPostRequestPayload() { var parameters = new AutocompleteParameters() { AutocompleteMode = AutocompleteMode.OneTermWithContext, Filter = "field eq 'text'", HighlightPostTag = "</em>", HighlightPreTag = "<em>", MinimumCoverage = 33.3, SearchFields = new[] { "a", "b", "c" }, Top = 5, UseFuzzyMatching = true }; AutocompleteRequest request = parameters.ToRequest("find me", "sg"); Assert.Equal(parameters.AutocompleteMode, request.AutocompleteMode); Assert.Equal(parameters.Filter, request.Filter); Assert.Equal(parameters.HighlightPostTag, request.HighlightPostTag); Assert.Equal(parameters.HighlightPreTag, request.HighlightPreTag); Assert.Equal(parameters.MinimumCoverage, request.MinimumCoverage); Assert.Equal("find me", request.SearchText); Assert.Equal("sg", request.SuggesterName); Assert.Equal(parameters.SearchFields.ToCommaSeparatedString(), request.SearchFields); Assert.Equal(parameters.Top, request.Top); Assert.Equal(parameters.UseFuzzyMatching, request.UseFuzzyMatching); }
public ActionResult Both(string term) { InitSearch(); AutocompleteParameters sp1 = new AutocompleteParameters() { AutocompleteMode = AutocompleteMode.OneTermWithContext, UseFuzzyMatching = false, Top = 5, MinimumCoverage = 80 }; AutocompleteResult resp1 = _indexClient.Documents.Autocomplete(term, "sg", sp1); // Call both the suggest and autocomplete API and return results SuggestParameters sp2 = new SuggestParameters() { UseFuzzyMatching = false, Top = 5 }; DocumentSuggestResult resp2 = _indexClient.Documents.Suggest(term, "sg", sp2); //Convert the suggest query results to a list that can be displayed in the client. var result = resp1.Results.Select(x => new { label = x.Text, category = "Autocomplete" }).ToList(); result.AddRange(resp2.Results.Select(x => new { label = x.Text, category = "Suggestions" }).ToList()); return(new JsonResult { JsonRequestBehavior = JsonRequestBehavior.AllowGet, Data = result }); }
public async Task <string[]> AutoCompleteAsync(string phrase, params string[] markets) { var result = Array.Empty <string>(); if (!string.IsNullOrWhiteSpace(phrase)) { var parameters = new AutocompleteParameters { AutocompleteMode = AutocompleteMode.TwoTerms, UseFuzzyMatching = false, Top = 5 }; if (!markets.IsNullOrEmpty()) { parameters.Filter = $"search.in({nameof(ApartmentDataIndexDocument.Market)}, '{string.Join("|", markets)}', '|')"; } using (var client = CreateClient(_options)) { var autocompleteResult = await client.Documents.AutocompleteAsync(phrase, "sg", parameters); result = autocompleteResult.Results.Select(x => x.Text).ToArray(); } } return(result); }
public ActionResult AutoComplete(string term) { // Perform autocomplete AutocompleteParameters ap = new AutocompleteParameters() { UseFuzzyMatching = true, Top = 7, AutocompleteMode = AutocompleteMode.OneTerm }; try { var response = searchClient.Indexes.GetClient(indexName).Documents.Autocomplete(term, "sg", ap); List <string> suggestions = new List <string>(); foreach (var result in response.Results) { suggestions.Add(result.QueryPlusText.ToString()); } return(new JsonResult { JsonRequestBehavior = JsonRequestBehavior.AllowGet, Data = suggestions }); } catch (Exception) { return(null); } }
private static void RunAutocompleteQueries(ISearchIndexClient indexClient) { AutocompleteParameters acparameters = new AutocompleteParameters { SearchFields = "hotelName,description" }; Console.WriteLine("Autocomplete query with OneTerm mode:\n"); AutocompleteResult response = indexClient.Documents.Autocomplete(AutocompleteMode.OneTerm, "best ho", "sg", autocompleteParameters: acparameters); WriteAutocompleteResults(response); Console.WriteLine("Autocomplete with OneTermWithContext mode:\n"); response = indexClient.Documents.Autocomplete(AutocompleteMode.OneTermWithContext, "best ho", "sg", autocompleteParameters: acparameters); WriteAutocompleteResults(response); Console.WriteLine("Autocomplete with TwoTerms mode:\n"); response = indexClient.Documents.Autocomplete(AutocompleteMode.TwoTerms, "best ho", "sg", autocompleteParameters: acparameters); WriteAutocompleteResults(response); Console.WriteLine("Autocomplete with OneTerm mode with fuzzy enabled:\n"); acparameters.Fuzzy = true; response = indexClient.Documents.Autocomplete(AutocompleteMode.OneTerm, "best hostel", "sg", autocompleteParameters: acparameters); WriteAutocompleteResults(response); }
public List <string> GetSearchAutocomplete(string text) { if (string.IsNullOrEmpty(text)) { return(new List <string>()); } try { bool isFuzzyEnabled = false, isHiglightsEnabled = false; AutocompleteParameters ap = new AutocompleteParameters() { AutocompleteMode = AutocompleteMode.OneTermWithContext, UseFuzzyMatching = isFuzzyEnabled, Top = 5 }; AutocompleteResult autocompleteResult = IndexClientSearch.Documents.Autocomplete(text, "toksdev-suggest", ap); // Convert the suggest query results to a list that can be displayed in the client. List <string> suggestions = (autocompleteResult.Results.Select(x => x.Text)).Distinct().ToList(); return(suggestions); } catch (Exception e) { return(new List <string>()); } }
protected void TestAutocompleteFuzzyIsOffByDefault() { SearchIndexClient client = GetClientForQuery(); var autocompleteParameters = new AutocompleteParameters() { AutocompleteMode = AutocompleteMode.OneTerm }; AutocompleteResult response = client.Documents.Autocomplete("pi", "sg", autocompleteParameters); Assert.NotNull(response.Results); Assert.Equal(0, response.Results.Count); }
protected void TestAutcompleteThrowsWhenGivenBadSuggesterName() { SearchIndexClient client = GetClientForQuery(); var autocompleteParameters = new AutocompleteParameters() { AutocompleteMode = AutocompleteMode.OneTerm }; SearchAssert.ThrowsCloudException( () => client.Documents.Autocomplete("very po", "Invalid suggester", autocompleteParameters), HttpStatusCode.BadRequest, "The specified suggester name 'Invalid suggester' does not exist in this index definition.\r\nParameter name: name"); }
protected void TestAutocompleteExcludesFieldsNotInSuggester() { SearchIndexClient client = GetClientForQuery(); var autocompleteParameters = new AutocompleteParameters() { AutocompleteMode = AutocompleteMode.OneTerm, SearchFields = new[] { "hotelName" } }; AutocompleteResult response = client.Documents.Autocomplete("luxu", "sg", autocompleteParameters); Assert.NotNull(response); Assert.NotNull(response.Results); Assert.Equal(0, response.Results.Count); }
public async Task <ActionResult> AutoComplete(string term) { InitSearch(); // Setup the autocomplete parameters. var ap = new AutocompleteParameters() { AutocompleteMode = AutocompleteMode.OneTermWithContext, Top = 6 }; AutocompleteResult autocompleteResult = await _indexClient.Documents.AutocompleteAsync(term, "sg", ap); // Convert the autocompleteResult results to a list that can be displayed in the client. List <string> autocomplete = autocompleteResult.Results.Select(x => x.Text).ToList(); return(new JsonResult(autocomplete)); }
/// <summary> /// We are manually building a parameter string to be used in our rest call. /// </summary> private string BuildParamString(string query, string suggestorName, AutocompleteParameters ap) { var sb = new StringBuilder(); sb.Append($"api-version={ApiVersion}&search={query}&suggesterName={suggestorName}&autocompleteMode={AutocompleteMode}"); if (ap.UseFuzzyMatching != null) { sb.Append($"&fuzzy={ap.UseFuzzyMatching.ToString().ToLower()}"); } if (ap.Top != null) { sb.Append($"&$top={ap.Top}"); } return(sb.ToString()); }
public IActionResult Autocomplete(string term) { InitSearch(); //Call autocomplete API and return results AutocompleteParameters ap = new AutocompleteParameters() { AutocompleteMode = AutocompleteMode.OneTermWithContext, UseFuzzyMatching = false, Top = 5 }; AutocompleteResult autocompleteResult = _indexClient.Documents.Autocomplete(term, "sg", ap); // Conver the Suggest results to a list that can be displayed in the client. List <string> autocomplete = autocompleteResult.Results.Select(x => x.Text).ToList(); return(new JsonResult(autocomplete.ToArray())); }
public async Task <ActionResult> AutoCompleteAndSuggest(string term) { // Use static variables to set up the configuration and Azure service and index clients, for efficiency. _builder = new ConfigurationBuilder().AddJsonFile("appsettings.json"); _configuration = _builder.Build(); _serviceClient = CreateSearchServiceClient(_configuration); _indexClient = _serviceClient.Indexes.GetClient("hotels"); //Call autocomplete API and return results AutocompleteParameters ap = new AutocompleteParameters() { AutocompleteMode = AutocompleteMode.OneTermWithContext, UseFuzzyMatching = false, Top = 1, }; AutocompleteResult autocompleteResult = await _indexClient.Documents.AutocompleteAsync(term, "sg", ap); // Call suggest API and return results SuggestParameters sp = new SuggestParameters() { UseFuzzyMatching = false, Top = 8, }; // Only one suggester can be specified per index. The name of the suggester is set when the suggester is specified by other API calls. // The suggester for the hotel database is called "sg" and simply searches the hotel name. DocumentSuggestResult <Hotel> suggestResult = await _indexClient.Documents.SuggestAsync <Hotel>(term, "sg", sp); List <string> results = new List <string>(); if (autocompleteResult.Results.Count > 0) { results.Add(autocompleteResult.Results[0].Text); } else { results.Add(""); } for (int n = 0; n < suggestResult.Results.Count; n++) { results.Add(suggestResult.Results[n].Text); } return(new JsonResult((object)results)); }
public async Task <ActionResult> AutocompleteAndSuggest(string term) { InitSearch(); // Setup the type-ahead search parameters. var ap = new AutocompleteParameters() { AutocompleteMode = AutocompleteMode.OneTermWithContext, Top = 1, }; AutocompleteResult autocompleteResult = await _indexClient.Documents.AutocompleteAsync(term, "sg", ap); // Setup the suggest search parameters. var sp = new SuggestParameters() { Top = 8, }; // Only one suggester can be specified per index. The name of the suggester is set when the suggester is specified by other API calls. // The suggester for the hotel database is called "sg" and simply searches the hotel name. DocumentSuggestResult <Hotel> suggestResult = await _indexClient.Documents.SuggestAsync <Hotel>(term, "sg", sp); // Create an empty list. var results = new List <string>(); if (autocompleteResult.Results.Count > 0) { // Add the top result for type-ahead. results.Add(autocompleteResult.Results[0].Text); } else { // There were no type-ahead suggestions, so add an empty string. results.Add(""); } for (int n = 0; n < suggestResult.Results.Count; n++) { // Now add the suggestions. results.Add(suggestResult.Results[n].Text); } // Return the list. return(new JsonResult(results)); }
public override async Task <EkKioskAutocompleteOptionsGetResponse> ExecuteAsync(EkKioskAutocompleteOptionsGetRequest request) { if (string.IsNullOrEmpty(request.Term) || request.SearchType != EkSearchTypeEnum.Name) { return(new EkKioskAutocompleteOptionsGetResponse() { AutocompleteOptions = new string[0], }); } // cancellation token var cancellationToken = _httpContextAccessor.HttpContext?.RequestAborted ?? CancellationToken.None; using (var searchIndexClient = AzureSearchHelper.CreateSearchIndexClient(_ekSearchSettings.ServiceName, _ekSearchSettings.QueryKey)) { searchIndexClient.IndexName = _ekSearchSettings.ProductsIndexName; var autocompleteParameters = new AutocompleteParameters() { // todo: request by OneTermWithContext first, only then by OneTerm (if not enough results) AutocompleteMode = AutocompleteMode.OneTerm, UseFuzzyMatching = true, Top = 10, SearchFields = EkKioskProductSearchByNameGet.GetLanguageSpecificTextFields(request.LanguageCode), }; var autocompleteResult = await searchIndexClient.Documents.AutocompleteAsync( request.Term, SearchConstants.SuggesterName, autocompleteParameters, cancellationToken : cancellationToken); var autocompleteOptions = autocompleteResult.Results .Select(x => x.Text) .ToArray(); return(new EkKioskAutocompleteOptionsGetResponse() { AutocompleteOptions = autocompleteOptions, }); } }
public void MissingParametersAreMissingInTheRequest() { var parameters = new AutocompleteParameters(); // Search text and suggester name can never be null. AutocompleteRequest request = parameters.ToRequest("welco", "sg"); Assert.True(request.AutocompleteMode.HasValue); Assert.Equal(AutocompleteMode.OneTerm, request.AutocompleteMode.Value); // AutocompleteMode is non-nullable in the client contract. Assert.Null(request.Filter); Assert.Null(request.HighlightPostTag); Assert.Null(request.HighlightPreTag); Assert.Null(request.MinimumCoverage); Assert.Equal("welco", request.SearchText); Assert.Equal("sg", request.SuggesterName); Assert.Null(request.SearchFields); Assert.Null(request.Top); Assert.False(request.UseFuzzyMatching.HasValue); }
public AutocompleteResult Autocomplete(string searchText, bool fuzzy) { // Execute search based on query string try { AutocompleteParameters ap = new AutocompleteParameters() { AutocompleteMode = AutocompleteMode.OneTermWithContext, UseFuzzyMatching = fuzzy, Top = 8 }; return(_indexClient.Documents.Autocomplete(searchText, "sg", ap)); } catch (Exception ex) { Console.WriteLine("Error querying index: {0}\r\n", ex.Message.ToString()); } return(null); }
public async Task <ActionResult> AutocompleteAndSuggest(string term) { InitSearch(); // Setup the type-ahead search parameters. var ap = new AutocompleteParameters { AutocompleteMode = AutocompleteMode.OneTermWithContext, Top = 1 }; AutocompleteResult autocompleteResult = await _indexClient.Documents.AutocompleteAsync(term, "sg", ap); // Setup the suggest search parameters. var sp = new SuggestParameters { Top = 8 }; DocumentSuggestResult <Hotel> suggestResult = await _indexClient.Documents.SuggestAsync <Hotel>(term, "sg", sp); var results = new List <string>(); if (autocompleteResult.Results.Count > 0) { // Add the top result for type-ahead results.Add(autocompleteResult.Results[0].Text); } else { // There were no type-ahead suggestions, so add an empty string. results.Add(string.Empty); } foreach (var result in suggestResult.Results) { results.Add(result.Text); } return(new JsonResult(results)); }
protected void TestAutocompleteTwoTermsWithFuzzy() { var expectedText = new List <string>() { "model suites", "modern architecture", "modern stay", "morel coverings", "motel" }; var expectedQueryPlusText = new List <string>() { "model suites", "modern architecture", "modern stay", "morel coverings", "motel" }; SearchIndexClient client = GetClientForQuery(); var autocompleteParameters = new AutocompleteParameters() { AutocompleteMode = AutocompleteMode.TwoTerms, UseFuzzyMatching = true }; AutocompleteResult response = client.Documents.Autocomplete("mod", "sg", autocompleteParameters); Assert.NotNull(response); ValidateResults(response.Results, expectedText, expectedQueryPlusText); }
protected void TestAutocompleteOneTermWithContextWithFuzzy() { var expectedText = new List <string>() { "very polite", "very police" }; var expectedQueryPlusText = new List <string>() { "very polite", "very police" }; SearchIndexClient client = GetClientForQuery(); var autocompleteParameters = new AutocompleteParameters() { AutocompleteMode = AutocompleteMode.OneTermWithContext, UseFuzzyMatching = true }; AutocompleteResult response = client.Documents.Autocomplete("very polit", "sg", autocompleteParameters); Assert.NotNull(response); ValidateResults(response.Results, expectedText, expectedQueryPlusText); }
protected void TestAutocompleteStaticallyTypedDocuments() { var expectedText = new List <string>() { "point", "police", "polite", "pool", "popular" }; var expectedQueryPlusText = new List <string>() { "very point", "very police", "very polite", "very pool", "very popular" }; SearchIndexClient client = GetClientForQuery(); var autocompleteParameters = new AutocompleteParameters() { AutocompleteMode = AutocompleteMode.OneTerm, UseFuzzyMatching = false }; AutocompleteResult response = client.Documents.Autocomplete("very po", "sg", autocompleteParameters); ValidateResults(response.Results, expectedText, expectedQueryPlusText); }
protected void TestAutocompleteWithMultipleSelectedFields() { var expectedText = new List <string>() { "model", "modern" }; var expectedQueryPlusText = new List <string>() { "model", "modern" }; SearchIndexClient client = GetClientForQuery(); var autocompleteParameters = new AutocompleteParameters() { AutocompleteMode = AutocompleteMode.OneTerm, SearchFields = new[] { "hotelName", "description" } }; AutocompleteResult response = client.Documents.Autocomplete("mod", "sg", autocompleteParameters); Assert.NotNull(response); ValidateResults(response.Results, expectedText, expectedQueryPlusText); }
public ActionResult AutoComplete(string term) { InitSearch(); //Call autocomplete API and return results AutocompleteParameters sp = new AutocompleteParameters() { AutocompleteMode = AutocompleteMode.OneTermWithContext, UseFuzzyMatching = false, Top = 5, MinimumCoverage = 80 }; AutocompleteResult resp = _indexClient.Documents.Autocomplete(term, "sg", sp); // Conver the Suggest results to a list that can be displayed in the client. List <string> autocomplete = resp.Results.Select(x => x.Text).ToList(); return(new JsonResult { JsonRequestBehavior = JsonRequestBehavior.AllowGet, Data = autocomplete }); }
public AutocompleteResult AutoComplete(string searchText) { try { AutocompleteParameters ap = new AutocompleteParameters() { AutocompleteMode = AutocompleteMode.OneTermWithContext, UseFuzzyMatching = true, HighlightPreTag = "<b >", HighlightPostTag = "</b>", Top = 5 }; AutocompleteResult autocompleteResult = _indexClient.Documents.Autocomplete(searchText, "AccountSuggester", ap); return(autocompleteResult); } catch (Exception ex) { Console.WriteLine("Error querying index: {0}\r\n", ex.Message.ToString( )); } return(null); }
protected void TestAutocompleteOneTerm() { var expectedText = new List <string>() { "point", "police", "polite", "pool", "popular" }; var expectedQueryPlusText = new List <string>() { "point", "police", "polite", "pool", "popular" }; SearchIndexClient client = GetClientForQuery(); var autocompleteParameters = new AutocompleteParameters() { AutocompleteMode = AutocompleteMode.OneTerm }; AutocompleteResult response = client.Documents.Autocomplete("po", "sg", autocompleteParameters); Assert.NotNull(response); ValidateResults(response.Results, expectedText, expectedQueryPlusText); }
public async Task <ActionResult> AutoComplete(string term) { // Use static variables to set up the configuration and Azure service and index clients, for efficiency. _builder = new ConfigurationBuilder().AddJsonFile("appsettings.json"); _configuration = _builder.Build(); _serviceClient = CreateSearchServiceClient(_configuration); _indexClient = _serviceClient.Indexes.GetClient("hotels"); //Call autocomplete API and return results AutocompleteParameters ap = new AutocompleteParameters() { AutocompleteMode = AutocompleteMode.OneTermWithContext, UseFuzzyMatching = false, Top = 5 }; AutocompleteResult autocompleteResult = await _indexClient.Documents.AutocompleteAsync(term, "sg", ap); // Convert the autocompleteResult results to a list that can be displayed in the client. List <string> autocomplete = autocompleteResult.Results.Select(x => x.Text).ToList(); return(new JsonResult((object)autocomplete)); }
protected void TestAutocompleteWithFilter() { var expectedText = new List <string>() { "polite" }; var expectedQueryPlusText = new List <string>() { "polite" }; SearchIndexClient client = GetClientForQuery(); var autocompleteParameters = new AutocompleteParameters() { AutocompleteMode = AutocompleteMode.OneTerm, Filter = "search.in(hotelId, '6,7')", }; AutocompleteResult response = client.Documents.Autocomplete("po", "sg", autocompleteParameters); Assert.NotNull(response); ValidateResults(response.Results, expectedText, expectedQueryPlusText); }
protected void TestAutocompleteWithFilterAndFuzzy() { var expectedText = new List <string>() { "modern", "motel" }; var expectedQueryPlusText = new List <string>() { "modern", "motel" }; SearchIndexClient client = GetClientForQuery(); var autocompleteParameters = new AutocompleteParameters() { AutocompleteMode = AutocompleteMode.OneTerm, UseFuzzyMatching = true, Filter = "hotelId ne '6' and (hotelName eq 'Modern Stay' or tags/any(t : t eq 'budget'))" }; AutocompleteResult response = client.Documents.Autocomplete("mod", "sg", autocompleteParameters); Assert.NotNull(response); ValidateResults(response.Results, expectedText, expectedQueryPlusText); }
//public DocumentSearchResult<Document> 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; //} public AutocompleteResult AutoComplete(IndexNameType indexNameType, string term) { //Call autocomplete API and return results AutocompleteParameters ap = new AutocompleteParameters() { AutocompleteMode = AutocompleteMode.OneTermWithContext, UseFuzzyMatching = false, Top = 5 }; var indexClient = GetIndexClient(indexNameType); var autocompleteResult = indexClient.Documents.Autocomplete(term, "sg", ap); return(autocompleteResult); //// Conver the Suggest results to a list that can be displayed in the client. //List<string> autocomplete = autocompleteResult.Results.Select(x => x.Text).ToList(); //return new JsonResult(autocomplete); //return new JsonResult(new //{ // JsonRequestBehavior = 0, // Data = autocomplete //}); }