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 類對映索引名
- 連線時設定預設索引