如何获取ElasticSearch索引中的现有映射

时间:2014-11-20 15:58:59

标签: c# .net elasticsearch nest

使用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(???);

但是这些方法和重载似乎需要映射的名称。这正是我想要找到的。我无法找到适合这种情况的文档。

1 个答案:

答案 0 :(得分:3)

您可以使用任一重载来下拉特定索引/类型的映射(但当前不是多个索引或类型)

client.GetMapping(g => g.Index("myindex").Type("mytype")));

client.GetMapping(new GetMappingRequest {Index = "myindex", Type = "mytype"});

我无法确定当您隐式提供<object>时会发生什么(它可能会爆炸;我不会在Windows计算机上测试它),但您显然不会知道类型(T)放在那里并需要一些东西。

不幸的是,目前上述限制(假设它适用于<object>)是您必须提供Index,并且可选地提供Type。如果您未指定Type,但Index包含多个类型,那么它将只选择返回的第一个类型。而且我怀疑这是你想要的,这就是为什么I created an issue for it on GitHub与Greg(NEST开发者之一)讨论后的原因。

幸运的是,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(大文件,因此搜索&#34; IndicesGetMapping&#34;)。