protected override ISearchProvider GetSearchProvider()
        {
            var azureSearchOptions = GetAzureSearchOptions();
            var options            = GetSearchOptions();

            var provider = new AzureSearchProvider(azureSearchOptions, options, GetSettingsManager());

            return(provider);
        }
        public void Can_create_azuresearch_index()
        {
            var scope        = "test";
            var queryBuilder = new AzureSearchQueryBuilder();
            var conn         = new SearchConnection(Datasource, scope, accessKey: AccessKey);
            var provider     = new AzureSearchProvider(queryBuilder, conn);

            SearchHelper.CreateSampleIndex(provider, scope);
            provider.RemoveAll(scope, String.Empty);
        }
        protected ISearchProvider GetSearchProvider(string searchProvider, string scope, string dataSource = null)
        {
            ISearchProvider provider = null;

            var phraseSearchCriteriaPreprocessor  = new PhraseSearchCriteriaPreprocessor(new SearchPhraseParser()) as ISearchCriteriaPreprocessor;
            var catalogSearchCriteriaPreprocessor = new CatalogSearchCriteriaPreprocessor();
            var searchCriteriaPreprocessors       = new[] { phraseSearchCriteriaPreprocessor, catalogSearchCriteriaPreprocessor };

            if (searchProvider == "Lucene")
            {
                var connection   = new SearchConnection(_luceneStorageDir, scope);
                var queryBuilder = new LuceneSearchQueryBuilder() as ISearchQueryBuilder;
                provider = new LuceneSearchProvider(new[] { queryBuilder }, connection, searchCriteriaPreprocessors);
            }

            if (searchProvider == "Elastic")
            {
                var elasticsearchHost = dataSource ?? Environment.GetEnvironmentVariable("TestElasticsearchHost") ?? "localhost:9200";

                var connection            = new SearchConnection(elasticsearchHost, scope);
                var queryBuilder          = new ElasticSearchQueryBuilder() as ISearchQueryBuilder;
                var elasticSearchProvider = new ElasticSearchProvider(connection, searchCriteriaPreprocessors, new[] { queryBuilder }, GetSettingsManager())
                {
                    EnableTrace = true
                };
                provider = elasticSearchProvider;
            }

            if (searchProvider == "Azure")
            {
                var azureSearchServiceName = Environment.GetEnvironmentVariable("TestAzureSearchServiceName");
                var azureSearchAccessKey   = Environment.GetEnvironmentVariable("TestAzureSearchAccessKey");

                var connection   = new SearchConnection(azureSearchServiceName, scope, accessKey: azureSearchAccessKey);
                var queryBuilder = new AzureSearchQueryBuilder() as ISearchQueryBuilder;
                provider = new AzureSearchProvider(connection, searchCriteriaPreprocessors, new[] { queryBuilder });
            }

            if (provider == null)
            {
                throw new ArgumentException($"Search provider '{searchProvider}' is not supported", nameof(searchProvider));
            }

            return(provider);
        }
        public void Can_find_item_azuresearch()
        {
            var scope        = "test";
            var queryBuilder = new AzureSearchQueryBuilder();
            var conn         = new SearchConnection(Datasource, scope, accessKey: AccessKey);
            var provider     = new AzureSearchProvider(queryBuilder, conn);

            provider.RemoveAll(scope, String.Empty);
            SearchHelper.CreateSampleIndex(provider, scope);

            var criteria = new CatalogItemSearchCriteria
            {
                SearchPhrase      = "product",
                IsFuzzySearch     = true,
                Catalog           = "goods",
                RecordsToRetrieve = 10,
                StartingRecord    = 0,
                Pricelists        = new string[] { }
            };


            // force delay, otherwise records are not available
            Thread.Sleep(1000);

            var results = provider.Search(scope, criteria);

            Assert.True(results.DocCount == 1, String.Format("Returns {0} instead of 1", results.DocCount));

            criteria = new CatalogItemSearchCriteria
            {
                SearchPhrase      = "sample product ",
                IsFuzzySearch     = true,
                Catalog           = "goods",
                RecordsToRetrieve = 10,
                StartingRecord    = 0,
                Pricelists        = new string[] { }
            };


            results = provider.Search(scope, criteria);

            Assert.True(results.DocCount == 1, String.Format("\"Sample Product\" search returns {0} instead of 1", results.DocCount));

            provider.RemoveAll(scope, String.Empty);
        }
        public void Can_find_items_azuresearch()
        {
            var scope        = "default";
            var queryBuilder = new AzureSearchQueryBuilder();
            var conn         = new SearchConnection(Datasource, scope, accessKey: AccessKey);
            var provider     = new AzureSearchProvider(queryBuilder, conn);

            var criteria = new CatalogItemSearchCriteria
            {
                SearchPhrase      = "sony",
                IsFuzzySearch     = true,
                Catalog           = "vendorvirtual",
                RecordsToRetrieve = 10,
                StartingRecord    = 0,
                Pricelists        = new string[] { },
                StartDate         = DateTime.UtcNow,
                Sort = new SearchSort("price_usd_saleusd")
            };

            criteria.Outlines.Add("vendorvirtual*");

            //"(startdate lt 2014-09-26T22:05:11Z) and sys__hidden eq 'false' and sys__outline/any(t:t eq 'VendorVirtual/e1b56012-d877-4bdd-92d8-3fc186899d0f*') and catalog/any(t: t eq 'VendorVirtual')"
            var results = provider.Search(scope, criteria);
        }