将JArray转换为Dynamic [],以便NEST的IndexMany可以工作]] << [

问题描述 投票:0回答:1
问题描述:

我需要接收

JSON对象数组(几乎具有任何形状),并使用函数IndexMany(或一些类似的批量索引函数)将它们存储到ES数据库。我发现了一个笨拙的解决方案,但有一个缺点-它无法正确设置ES中的_id属性(根据JSON对象中的id属性)。 而且我也想知道是否有任何更优雅的方式来实现我的目标,而无需将每个JArray项目都转换为字符串并返回到ExpandoObject。

附加信息:

Elasticsearch DB 7.5.1巢(7.6.1)Newtonsoft.Json(12.0.3)

TLDR:

以下代码是否有任何优雅的解决方案:

var settings = new ConnectionSettings(new Uri("http://localhost:9200")).DefaultIndex("people"); var client = new ElasticClient(settings); // this string represents incomming JSON message string json = @"[ { ""id"": ""1"", ""name"": ""Andrej"", ""surname"": ""Burak"", ""dob"": ""1921-11-10T00:00:00+00:00"" }, { ""id"": ""2"", ""name"": ""Franta"", ""surname"": ""Dobrota"", ""dob"": ""1933-10-05T00:00:00+00:00"" }, { ""id"": ""3"", ""name"": ""Milos"", ""surname"": ""Ovcacek"", ""dob"": ""1988-05-05T00:00:00+00:00"" } ]"; JArray jArray = JArray.Parse(json); foreach (var jtoken in jArray) { var jobj = (JObject)jtoken; jobj.Add("DbCreated", JToken.FromObject(DateTime.UtcNow)); jobj.Add("DbCreatedBy", JToken.FromObject("authors name")); } //working, but seems to me a bit too clumsy to convert every item to string and then back to dynamic object var converter = new ExpandoObjectConverter(); dynamic[] dlst = jArray.Select(t => (dynamic)JsonConvert.DeserializeObject<ExpandoObject>(t.ToString(), converter)).ToArray(); //not working cast dynamic[] dlstNW = jArray.ToObject<dynamic[]>(); var indexManyResponse = client.IndexMany(dlst); //working partially (but not using ID as index) var indexManyResponseNotWorking = client.IndexMany(jArray); //not working var indexManyResponseNotWorking2 = client.IndexMany(dlstNW); //not working // expected behavior dynamic[] jsondyn = new dynamic[] { new { Id = "1", Name = "foo" }, new { Id = "2", Name = "bar" }, new { Id = "3", Name = "baz" }, }; var indexManyResponseWithIndex = client.IndexMany(jsondyn); //working perfectly, but don't know how to acieve this

问题描述:我需要接收对象的JSON数组(几乎任何形状),并使用IndexMany函数(或一些类似的批量索引函数)将它们存储到ES数据库。我发现了一些...
c# .net elasticsearch nest
1个回答
0
投票
@gnud pointed me to low-level client之后,我想我已经找到了答案。重要的是手动建立请求like it was explained here
© www.soinside.com 2019 - 2024. All rights reserved.