NEST教程系列:推断索引名
NEST教程系列:三种推断索引名写法
连接时设置默认索引
构建
ConnectionSettings
时调用DefaultIndex()
方法指定默认索引名。当无法为请求解析具体索引名时使用默认索引名
var settings = new ConnectionSettings()
.DefaultIndex("defaultindex");
var client = new ElasticClient(settings);
var searchResponse = client.Search<Project>();
此时,当发送请求时实际 URL 如下
"http://localhost:9200/defaultindex/_search"
设置 .NET 类映射索引名
构建
ConnectionSettings
时调用DefaultMappingFor<T>()
方法为类对象配置映射的索引名
var settings = new ConnectionSettings()
.DefaultMappingFor<Project>(m => m
.IndexName("projects")
);
var client = new ElasticClient(settings);
var searchResponse = client.Search<Project>();
此时,当发送请求时实际 URL 如下
"http://localhost:9200/projects/_search"
DefaultMappingFor<T>()
方法配置映射的索引名使用优先级高于DefaultIndex()
方法设置的默认索引名
var settings = new ConnectionSettings()
.DefaultIndex("defaultindex")
.DefaultMappingFor<Project>(m => m
.IndexName("projects")
);
var client = new ElasticClient(settings);
var projectSearchResponse = client.Search<Project>();
此时,当发送请求时实际 URL 如下
"http://localhost:9200/projects/_search"
但是以下写法
var objectSearchResponse = client.Search<object>();
发送请求时实际 URL 如下
"http://localhost:9200/defaultindex/_search"
DefaultMappingFor<T>()
还可以用于指定类型的其他默认值,包括属性名称、用于文档id的属性等等
在创建请求的时候直接显式指定索引名
对于需要索引名的API调用,可以在请求中显式地提供索引名
var settings = new ConnectionSettings();
var client = new ElasticClient(settings);
var response = client.Search<Project>(s => s
.Index("some-other-index") );
此时,当发送请求时实际 URL 如下
"http://localhost:9200/some-other-index/_search"
当在请求中显示指定索引名时,它将优先于 DefaultMappingFor<T>()
方法配置映射的索引名和DefaultIndex()
方法设置的默认索引名
var settings = new ConnectionSettings()
.DefaultIndex("defaultindex")
.DefaultMappingFor<Project>(m => m
.IndexName("projects")
);
var client = new ElasticClient(settings);
var response = client.Search<Project>(s => s
.Index("some-other-index"));
此时,当发送请求时实际 URL 如下
"http://localhost:9200/some-other-index/_search"
总结
执行请求时的索引名取值优先级排序为
- 在创建请求的时候直接显式指定索引名
- 设置 .NET 类映射索引名
- 连接时设置默认索引