Пример #1
0
        // 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)));
        }
Пример #2
0
        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;
        }
Пример #3
0
 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);
    }
Пример #5
0
        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;
            }
        }
Пример #6
0
        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;
        }
Пример #7
0
        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());
        }
Пример #9
0
        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);
 }
Пример #14
0
        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);
        }
Пример #19
0
        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)));
        }
Пример #20
0
        // 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);
        }
Пример #21
0
        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();
        }
Пример #22
0
        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);
        }
Пример #24
0
        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;
        }
Пример #25
0
        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();
        }
Пример #27
0
        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);
        }
Пример #28
0
        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;
 }
Пример #33
0
        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());
 }
Пример #35
0
        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());
        }
Пример #37
0
 /// <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));