NEST教程系列:推断索引名

NEST教程系列:三种推断索引名写法

连接时设置默认索引

构建 ConnectionSettings 时调用 DefaultIndex() 方法指定默认索引名。当无法为请求解析具体索引名时使用默认索引名

var settings = new ConnectionSettings()
    .DefaultIndex("defaultindex"); 
    
var client = new ElasticClient(settings);
var searchResponse = client.Search<Project>();

此时,当发送请求时实际 URL 如下

"//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 如下

"//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 如下

"//localhost:9200/projects/_search"

但是以下写法

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

发送请求时实际 URL 如下

"//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 如下

"//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 如下

"//localhost:9200/some-other-index/_search"

总结

执行请求时的索引名取值优先级排序为

  1. 在创建请求的时候直接显式指定索引名
  2. 设置 .NET 类映射索引名
  3. 连接时设置默认索引

🚀官网传送门