Index name inferenceedit
Many endpoints within the Elasticsearch API expect to receive one or more index names as part of the request, in order to know what index/indices a request should operate on.
NEST has a number of ways in which the index name(s) can be specified
Default Index name on Connection Settingsedit
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
var settings = new ConnectionSettings() .DefaultIndex("defaultindex"); var client = new ElasticClient(settings); var searchResponse = client.Search<Project>();
will send a search request to the API endpoint
"http://localhost:9200/defaultindex/_search"
Index name for a .NET typeedit
An index name can be mapped for a Plain Old CLR Object (POCO) using .DefaultMappingFor<T>()
on ConnectionSettings
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
"http://localhost:9200/projects/_search"
.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.
var settings = new ConnectionSettings() .DefaultIndex("defaultindex") .DefaultMappingFor<Project>(m => m .IndexName("projects") ); var client = new ElasticClient(settings); var projectSearchResponse = client.Search<Project>();
a default index to use, when no other index can be inferred |
|
a index to use when |
will send a search request to the API endpoint
"http://localhost:9200/projects/_search"
but
var objectSearchResponse = client.Search<object>();
will send a search request to the API endpoint
"http://localhost:9200/defaultindex/_search"
Explicitly specifying Index name on the requestedit
For API calls that expect an index name, an index name can be explicitly provided on the request
var settings = new ConnectionSettings(); var client = new ElasticClient(settings); var response = client.Search<Project>(s => s .Index("some-other-index") );
will send a search request to the API endpoint
"http://localhost:9200/some-other-index/_search"
When an index name is provided on a request, it will take precedence over the default
index name specified on ConnectionSettings
, and any index name specified for the POCO
using .DefaultMappingFor<T>()
. The following example will send a search request
to the same API endpoint as the previous example
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") );
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
.DefaultMappingFor<T>()
-
Default index name specified on
ConnectionSettings
If no index can be determined for a request that requires an index, the client will throw an exception to indicate that this is the case.