使用Nest和C#,我想检查索引中存在的映射.
var settings = new ConnectionSettings(new Uri("http://localhost:9200"));
var client = new ElasticClient(settings);
var status = client.Status();
这将返回ES服务器的可用索引.但是我也想知道那些索引中映射了什么类型.
我尝试使用:
var mapping = client.GetMapping(???);
但是这些方法和重载似乎需要映射的名称.这正是我要找出的.在这种情况下,我找不到合适的文档.
解决方法:
您可以使用任一重载来下拉特定索引/类型的映射(但当前不能使用复数索引或类型)
client.GetMapping(g => g.Index("myindex").Type("mytype")));
与
client.GetMapping(new GetMappingRequest {Index = "myindex", Type = "mytype"});
我不确定当您隐式提供< object>时会发生什么. (它可能会爆炸;我不在Windows机器上进行测试),但是您显然不知道放置在其中的类型(T),并且需要一些东西.
不幸的是,上面的当前限制(假设它与< object>一起使用)是您必须提供一个Index,以及可选的Type.如果未指定类型,但索引包含多个类型,则它将仅选择第一个返回的类型.我怀疑这就是您想要的,这就是为什么与Greg(NEST开发人员之一)讨论I created an issue for it on GitHub后的原因.
幸运的是,NEST始终存在一个后备,这是使用较低级别的Elasticsearch.NET API.在那里,您可以发出IndicesGetMapping请求.查看generated tests can be found here,这可能有助于更好地了解所生成的请求.
var response = client.IndicesGetMapping("test_1,test_2");
// Deserialized JSON:
//
// response.test_1.mappings.type_1.properties
// response.test_1.mappings.type_2.properties
// response.test_2.mappings.type_a.properties
注意,也可以使用这些重载:
// First parameter is indices (comma separated, potentially wildcarded list)
// _all is a special placeholder to [shockingly] specify all
var response = client.IndicesGetMapping("_all", "_all");
var response = client.IndicesGetMapping("index1,index2", "_all");
// Enjoy the loops:
var response = client.IndicesGetMappingForAll();
它们可以是found in IElasticsearchClient.Generated
(大文件,因此搜索“ IndicesGetMapping”).