Пример #1
0
        public void Initialize(string serverUri)
        {
            _nodeLocation = new Uri(serverUri);
            _settings     = new ConnectionSettings(_nodeLocation)
                            .DefaultMappingFor <Drug>(m => m.IndexName(Drug.IndexName)
                                                      .IdProperty("Id"))
                            .DefaultMappingFor <Application>(m => m.IndexName(Application.IndexName)
                                                             .IdProperty("Id"))
                            .DefaultMappingFor <Exclusivity>(m => m.IndexName(Exclusivity.IndexName)
                                                             .IdProperty("Id"))
                            .DefaultMappingFor <FederalUpperLimit>(m => m.IndexName(FederalUpperLimit.IndexName)
                                                                   .IdProperty("Id"))
                            .DefaultMappingFor <Nadac>(m => m.IndexName(Nadac.IndexName)
                                                       .IdProperty("Id"))
                            .DefaultMappingFor <Package>(m => m.IndexName(Package.IndexName)
                                                         .IdProperty("Id"))
                            .DefaultMappingFor <Patent>(m => m.IndexName(Patent.IndexName)
                                                        .IdProperty("Id"))
                            .DefaultMappingFor <PharmaClass>(m => m.IndexName(PharmaClass.IndexName)
                                                             .IdProperty("Id"))
                            .DefaultMappingFor <StateDrugUtilization>(m => m.IndexName(StateDrugUtilization.IndexName)
                                                                      .IdProperty("Id"));

            _resolver = new IndexNameResolver(_settings);
            _client   = new ElasticClient(_settings);
        }
Пример #2
0
		public void DefaultIndexIsInferred()
		{
			var settings = new ConnectionSettings()
				.DefaultIndex("defaultindex");
			var resolver = new IndexNameResolver(settings);
			var index = resolver.Resolve<Project>();
			index.Should().Be("defaultindex");
		}
Пример #3
0
        /** In summary, the order of precedence for determining the index name for a request is
         *
         * . Index name specified  on the request
         * . Index name specified for the generic type parameter in the request using `.MapDefaultTypeIndices()` or `.DefaultMappingFor<T>()`
         * . Default index name specified on `ConnectionSettings`
         */

        //hide
        [U] public void NoIndexThrowsArgumentException()
        {
            var settings = new ConnectionSettings();
            var resolver = new IndexNameResolver(settings);
            var e        = Assert.Throws <ArgumentException>(() => resolver.Resolve <Project>());

            e.Message.Should().Contain("Index name is null");
        }
Пример #4
0
        private void MappingDefault()
        {
            var settings = new ConnectionSettings()
                           .MapDefaultTypeIndices(m => m.Add(typeof(Document), DOCUMENT_INDEX_NAME));

            var resolver = new IndexNameResolver(settings);
            var index    = resolver.Resolve <Document>();
        }
Пример #5
0
        public static void DefaultSettings()
        {
            var settings = new ConnectionSettings()
                           .DefaultIndex("defaultindex");
            var resolver = new IndexNameResolver(settings);
            var index    = resolver.Resolve <Person>();

            index.Should().Be("defaultindex");
        }
Пример #6
0
        /**
         * ==== Default Index name on Connection Settings
         * A default index name can be specified on `ConnectionSettings` using `.DefaultIndex()`.
         * This is the default index name to use when no other index name can be resolved for a request
         */
        [U] public void DefaultIndexIsInferred()
        {
            var settings = new ConnectionSettings()
                           .DefaultIndex("defaultindex");
            var resolver = new IndexNameResolver(settings);
            var index    = resolver.Resolve <Project>();

            index.Should().Be("defaultindex");
        }
Пример #7
0
		public void ExplicitMappingIsInferred()
		{
			var settings = new ConnectionSettings()
				.MapDefaultTypeIndices(m => m
					.Add(typeof(Project), "projects")
				);
			var resolver = new IndexNameResolver(settings);
			var index = resolver.Resolve<Project>();
			index.Should().Be("projects");
		}
Пример #8
0
 public void Initialize(NuGetSearchAppConfig config)
 {
     _nodeLocation = new Uri(config.ServerUri);
     _settings     = new ConnectionSettings(_nodeLocation)
                     .DefaultMappingFor <NuGetSearchMain>(m => m.IndexName(config.IndexName)
                                                          .IdProperty("Id"));
     _resolver  = new IndexNameResolver(_settings);
     _indexName = _resolver.Resolve <NuGetSearchMain>();
     _client    = new ElasticClient(_settings);
 }
Пример #9
0
        public void ExplicitMappingIsInferred()
        {
            var settings = new ConnectionSettings()
                           .MapDefaultTypeIndices(m => m
                                                  .Add(typeof(Project), "projects")
                                                  );
            var resolver = new IndexNameResolver(settings);
            var index    = resolver.Resolve <Project>();

            index.Should().Be("projects");
        }
		/**=== Mapping an Index name for POCOs
		* An index name for a POCO provided using `.MapDefaultTypeIndices()` **will take precedence** over
		* the default index name
		*/
		[U] public void ExplicitMappingTakesPrecedence()
		{
			var settings = new ConnectionSettings()
				.DefaultIndex("defaultindex")
				.MapDefaultTypeIndices(m => m
					.Add(typeof(Project), "projects")
				);
			var resolver = new IndexNameResolver(settings);
			var index = resolver.Resolve<Project>();
			index.Should().Be("projects");
		}
Пример #11
0
        public void ExplicitMappingIsInferredUsingDefaultMappingFor()
        {
            var settings = new ConnectionSettings()
                           .DefaultMappingFor <Project>(m => m
                                                        .IndexName("projects")
                                                        );
            var resolver = new IndexNameResolver(settings);
            var index    = resolver.Resolve <Project>();

            index.Should().Be("projects");
        }
Пример #12
0
        /** An index name for a POCO provided using `.MapDefaultTypeIndices()` or `.DefaultMappingFor<T>()` **will take precedence** over
         * the default index name set on `ConnectionSettings`. This way, the client can be configured with a default index to use if no
         * index is specified, and a specific index to use for different POCO types.
         */
        [U] public void ExplicitMappingTakesPrecedence()
        {
            var settings = new ConnectionSettings()
                           .DefaultIndex("defaultindex")
                           .DefaultMappingFor <Project>(m => m
                                                        .IndexName("projects")
                                                        );
            var resolver = new IndexNameResolver(settings);
            var index    = resolver.Resolve <Project>();

            index.Should().Be("projects");
        }
Пример #13
0
        public Inferrer(IElasticsearchClientSettings elasticsearchClientSettings)
        {
            elasticsearchClientSettings.ThrowIfNull(nameof(elasticsearchClientSettings));
            _elasticsearchClientSettings = elasticsearchClientSettings;
            IdResolver           = new IdResolver(elasticsearchClientSettings);
            IndexNameResolver    = new IndexNameResolver(elasticsearchClientSettings);
            RelationNameResolver = new RelationNameResolver(elasticsearchClientSettings);
            FieldResolver        = new FieldResolver(elasticsearchClientSettings);
            RoutingResolver      = new RoutingResolver(elasticsearchClientSettings, IdResolver);

            //CreateMultiHitDelegates =
            //	new ConcurrentDictionary<Type,
            //		Action<MultiGetResponseFormatter.MultiHitTuple, IJsonFormatterResolver, ICollection<IMultiGetHit<object>>>>();
            //CreateSearchResponseDelegates =
            //	new ConcurrentDictionary<Type,
            //		Action<MultiSearchResponseFormatter.SearchHitTuple, IJsonFormatterResolver, IDictionary<string, IElasticsearchResponse>>>();
        }
Пример #14
0
        public void UppercaseCharacterThrowsResolveException()
        {
            var settings = new ConnectionSettings()
                           .DefaultIndex("Default")
                           .MapDefaultTypeIndices(m => m
                                                  .Add(typeof(Project), "myProjects")
                                                  );

            var resolver = new IndexNameResolver(settings);

            var e = Assert.Throws <ResolveException>(() => resolver.Resolve <Project>());

            e.Message.Should().Be($"Index names cannot contain uppercase characters: myProjects.");
            e = Assert.Throws <ResolveException>(() => resolver.Resolve <Tag>());
            e.Message.Should().Be($"Index names cannot contain uppercase characters: Default.");
            e = Assert.Throws <ResolveException>(() => resolver.Resolve("Foo"));
            e.Message.Should().Be($"Index names cannot contain uppercase characters: Foo.");
        }
Пример #15
0
        /**
         * `.DefaultMappingFor<T>()` can also be used to specify other defaults for a POCO, including
         * property names, property to use for the document id, amongst others.
         *
         * An index name for a POCO provided using `.DefaultMappingFor<T>()` **will take precedence** over
         * the default index name set on `ConnectionSettings`. This way, the client can be configured with a default index to use if no
         * index is specified, and a specific index to use for different POCO types.
         */
        [U] public void ExplicitMappingTakesPrecedence()
        {
            var settings = new ConnectionSettings()
                           .DefaultIndex("defaultindex")                       // <1> a default index to use, when no other index can be inferred
                           .DefaultMappingFor <Project>(m => m
                                                        .IndexName("projects") // <2> a index to use when `Project` is the target POCO type
                                                        );

            var client = new ElasticClient(settings);

            var projectSearchResponse = client.Search <Project>();

            /**
             * will send a search request to the API endpoint
             */
            //json
            var expected = "http://localhost:9200/projects/_search";

            //hide
            {
                projectSearchResponse.ApiCall.Uri.GetLeftPart(UriPartial.Path).Should().Be(expected);
                var resolver = new IndexNameResolver(settings);
                var index    = resolver.Resolve <Project>();
                index.Should().Be("projects");
            }

            /**
             * but
             */
            var objectSearchResponse = client.Search <object>();

            /**
             * will send a search request to the API endpoint
             */
            //json
            expected = "http://localhost:9200/defaultindex/_search";

            //hide
            objectSearchResponse.ApiCall.Uri.GetLeftPart(UriPartial.Path).Should().Be(expected);
        }
Пример #16
0
        static void Configure()
        {
            var builder = new ConfigurationBuilder()
                          .SetBasePath(Directory.GetCurrentDirectory())
                          .AddJsonFile("appsettings.json", optional: false, reloadOnChange: false);
            IConfigurationRoot configuration = builder.Build();
            var section = configuration.GetSection("NuGetSearch");

            _baseDir      = section["CacheFileDirectory"];
            _cursorFile   = Path.Combine(_baseDir, "cursor.txt");
            _metaDataFile = Path.Combine(_baseDir, "metadata.txt");
            _cacheFiles   = Path.Combine(_baseDir, "files");
            _errLogFile   = Path.Combine(_baseDir, "errors.txt");

            _nodeLocation = new Uri(section["ServerUri"]);
            _settings     = new ConnectionSettings(_nodeLocation)
                            .DefaultMappingFor <NuGetSearchMain>(m => m.IndexName(section["IndexName"])
                                                                 .IdProperty("Id"));
            _resolver  = new IndexNameResolver(_settings);
            _indexName = _resolver.Resolve <NuGetSearchMain>();
            _client    = new ElasticClient(_settings);
        }
Пример #17
0
        /**
         * ==== Default Index name on Connection Settings
         * A default index name can be specified on `ConnectionSettings` using `.DefaultIndex()`.
         * This is the default index name to use, when no other index name can be resolved for a request
         */
        [U] public void DefaultIndexIsInferred()
        {
            var settings = new ConnectionSettings()
                           .DefaultIndex("defaultindex");      // <1> set the default index

            var client         = new ElasticClient(settings);
            var searchResponse = client.Search <Project>();

            /**
             * will send a search request to the API endpoint
             */
            //json
            var expected = "http://localhost:9200/defaultindex/_search";

            //hide
            {
                searchResponse.ApiCall.Uri.GetLeftPart(UriPartial.Path).Should().Be(expected);
                var resolver = new IndexNameResolver(settings);
                var index    = resolver.Resolve <Project>();
                index.Should().Be("defaultindex");
            }
        }
Пример #18
0
        public void ExplicitMappingIsInferredUsingDefaultMappingFor()
        {
            var settings = new ConnectionSettings()
                           .DefaultMappingFor <Project>(m => m
                                                        .IndexName("projects")
                                                        );

            var client         = new ElasticClient(settings);
            var searchResponse = client.Search <Project>();

            /**
             * will send a search request to the API endpoint
             */
            //json
            var expected = "http://localhost:9200/projects/_search";

            //hide
            {
                searchResponse.ApiCall.Uri.GetLeftPart(UriPartial.Path).Should().Be(expected);
                var resolver = new IndexNameResolver(settings);
                var index    = resolver.Resolve <Project>();
                index.Should().Be("projects");
            }
        }
Пример #19
0
 public string IndexName <T>() => IndexNameResolver.Resolve <T>();
Пример #20
0
 public string IndexName(IndexName index) => IndexNameResolver.Resolve(index);
Пример #21
0
		public void UppercaseCharacterThrowsResolveException()
		{
			var settings = new ConnectionSettings()
				.DefaultIndex("Default")
				.MapDefaultTypeIndices(m => m
					.Add(typeof(Project), "myProjects")
				);

			var resolver = new IndexNameResolver(settings);

			var e = Assert.Throws<ResolveException>(() => resolver.Resolve<Project>());
			e.Message.Should().Be($"Index names cannot contain uppercase characters: myProjects.");
			e = Assert.Throws<ResolveException>(() => resolver.Resolve<Tag>());
			e.Message.Should().Be($"Index names cannot contain uppercase characters: Default.");
			e = Assert.Throws<ResolveException>(() => resolver.Resolve("Foo"));
			e.Message.Should().Be($"Index names cannot contain uppercase characters: Foo.");
		}
Пример #22
0
		public void NoIndexThrowsResolveException()
		{
			var settings = new ConnectionSettings();
			var resolver = new IndexNameResolver(settings);
			var e = Assert.Throws<ResolveException>(() => resolver.Resolve<Project>());
			e.Message.Should().Contain("Index name is null");
		}
        public void Initialize(string serverUri)
        {
            _nodeLocation = new Uri(serverUri);
            _settings     = new ConnectionSettings(_nodeLocation)
                            .DefaultMappingFor <Drug>(m => m.IndexName(Drug.IndexName)
                                                      .IdProperty("Id"))
                            .DefaultMappingFor <Application>(m => m.IndexName(Application.IndexName)
                                                             .IdProperty("Id"))
                            .DefaultMappingFor <Exclusivity>(m => m.IndexName(Exclusivity.IndexName)
                                                             .IdProperty("Id"))
                            .DefaultMappingFor <FederalUpperLimit>(m => m.IndexName(FederalUpperLimit.IndexName)
                                                                   .IdProperty("Id"))
                            .DefaultMappingFor <Nadac>(m => m.IndexName(Nadac.IndexName)
                                                       .IdProperty("Id"))
                            .DefaultMappingFor <Package>(m => m.IndexName(Package.IndexName)
                                                         .IdProperty("Id"))
                            .DefaultMappingFor <Patent>(m => m.IndexName(Patent.IndexName)
                                                        .IdProperty("Id"))
                            .DefaultMappingFor <PharmaClass>(m => m.IndexName(PharmaClass.IndexName)
                                                             .IdProperty("Id"))
                            .DefaultMappingFor <StateDrugUtilization>(m => m.IndexName(StateDrugUtilization.IndexName)
                                                                      .IdProperty("Id"));

            _resolver = new IndexNameResolver(_settings);
            _client   = new ElasticClient(_settings);

            Indices.ManyIndices indexesToDelete = Indices.Index(
                Drug.IndexName,
                Application.IndexName,
                Exclusivity.IndexName,
                FederalUpperLimit.IndexName,
                Nadac.IndexName,
                Package.IndexName,
                Patent.IndexName,
                PharmaClass.IndexName,
                StateDrugUtilization.IndexName
                );

            _client.DeleteIndex(indexesToDelete);

            _client.CreateIndex(Drug.IndexName,
                                x => x.Settings(s => s.NumberOfShards(3))
                                .Mappings(m => m
                                          .Map <Drug>(mt => mt.AutoMap())));
            _client.CreateIndex(Application.IndexName,
                                x => x.Settings(s => s.NumberOfShards(3))
                                .Mappings(m => m
                                          .Map <Application>(mt => mt.AutoMap()))
                                );
            _client.CreateIndex(Exclusivity.IndexName,
                                x => x.Settings(s => s.NumberOfShards(3))
                                .Mappings(m => m
                                          .Map <Exclusivity>(mt => mt.AutoMap()))
                                );
            _client.CreateIndex(FederalUpperLimit.IndexName,
                                x => x.Settings(s => s.NumberOfShards(3))
                                .Mappings(m => m
                                          .Map <FederalUpperLimit>(mt => mt.AutoMap()))
                                );
            _client.CreateIndex(Nadac.IndexName,
                                x => x.Settings(s => s.NumberOfShards(3))
                                .Mappings(m => m
                                          .Map <Nadac>(mt => mt.AutoMap()))
                                );
            _client.CreateIndex(Package.IndexName,
                                x => x.Settings(s => s.NumberOfShards(3))
                                .Mappings(m => m
                                          .Map <Package>(mt => mt.AutoMap()))
                                );
            _client.CreateIndex(Patent.IndexName,
                                x => x.Settings(s => s.NumberOfShards(3))
                                .Mappings(m => m
                                          .Map <Patent>(mt => mt.AutoMap()))
                                );
            _client.CreateIndex(PharmaClass.IndexName,
                                x => x.Settings(s => s.NumberOfShards(3))
                                .Mappings(m => m
                                          .Map <PharmaClass>(mt => mt.AutoMap()))
                                );
            _client.CreateIndex(StateDrugUtilization.IndexName,
                                x => x.Settings(s => s.NumberOfShards(3))
                                .Mappings(m => m
                                          .Map <StateDrugUtilization>(mt => mt.AutoMap()))
                                );
        }