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); }
public void DefaultIndexIsInferred() { var settings = new ConnectionSettings() .DefaultIndex("defaultindex"); var resolver = new IndexNameResolver(settings); var index = resolver.Resolve<Project>(); index.Should().Be("defaultindex"); }
/** 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"); }
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>(); }
public static void DefaultSettings() { var settings = new ConnectionSettings() .DefaultIndex("defaultindex"); var resolver = new IndexNameResolver(settings); var index = resolver.Resolve <Person>(); index.Should().Be("defaultindex"); }
/** * ==== 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"); }
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"); }
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); }
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"); }
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"); }
/** 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"); }
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>>>(); }
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."); }
/** * `.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); }
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); }
/** * ==== 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"); } }
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"); } }
public string IndexName <T>() => IndexNameResolver.Resolve <T>();
public string IndexName(IndexName index) => IndexNameResolver.Resolve(index);
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."); }
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())) ); }