有两种方法可以做到这一点。
尝试将索引建立为动态类型是行不通的,但是您可以通过IndexRequest对象将其索引为一个对象。
dynamic dynamicDoc = new { };ElasticClient esClient = new ElasticClient(esSettings);IndexRequest<object> request = new IndexRequest<object>(dynamicDoc){ Index = "someindex", Type = "SomeType", Id = "someid"};esClient.Index<object>(request);或者如果批量处理文件
List<dynamic> documents = new List<dynamic>();//Populate documentsBulkDescriptor descriptor = new BulkDescriptor();foreach(var doc in documents){ descriptor.Index<object>(i => i .Index("someindex") .Type("SomeType") .Id("someid") .document(doc));}esClient.Bulk(descriptor);NEST(或更准确地说,Elasticsearch.Net)也有一个.Raw方法变体附加到ElasticClient类,该变体可以索引原始JSON。使用Raw.Index()让我们做这样的事情:
string documentJson = JsonConvert.SerializeObject(document.document);ElasticsearchResponse<string> result = esClient.Raw.Index(document.Index, document.Type, document.Id, documentJson);
响应的类型描述符是您期望响应位于的类型(字符串表示您将拥有序列化的json响应,可以对其进行反序列化并对其进行处理)。这使我们可以回避整个对象类型问题,并且NEST完全按预期将文档索引到Elasticsearch中。



