NEST教程系列:推斷索引名

天盛發表於2020-07-10

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"

總結

執行請求時的索引名取值優先順序排序為

  1. 在建立請求的時候直接顯式指定索引名
  2. 設定 .NET 類對映索引名
  3. 連線時設定預設索引

?官網傳送門

相關文章