是否有没有泛型的client.Read(...)
?我在Nest nor ElasticSearch.Net中都找不到。
1.5版的IDocument
可以解决我的问题,但是我无法在Elasticsearch5.5中使用该版本。
ElasticSearch.Net和Nest的所有示例(版本5和6)都要求我在编译时就知道响应的格式。例如。 Read<Customer>
(...)
我的问题是我们不知道数据库的格式,我们也不知道输出的格式;但它们应该都是可配置的。
答案 0 :(得分:2)
如果响应确实是动态的,则可以将dynamic
用作通用类型。
在5.x中,这是Json.NET的JObject
类型(因此,如果愿意,可以改用JObject
)。
在6.x中,dynamic
也可以使用,但是实际类型将是内部JObject
类型。如果您希望使用Json.NET的JObject
类型,可以使用hook up Json.NET as the serializer NEST.JsonNetSerializer nuget package用作文档的序列化器,然后使用其JObject
类型按照5.x。
答案 1 :(得分:0)
(回答我自己的问题感到很奇怪,但是我想显示结果代码以供将来参考。)
var settings = new ConnectionSettings(new Uri(@"http://localnhost:9200"))
.DefaultIndex("myindex");
var client = new ElasticClient(settings);
var res = client.Search<dynamic>(s => s
.AllTypes());
var rows = res.Documents;
Assert.IsTrue(rows.Count >= 1);
dynamic row = res.Documents.First();
Assert.AreEqual("50.7031526", row.POSITION.lat.ToString()); // It is case sensitive.
Assert.AreEqual(50.7031526, (double)row.POSITION.lat); // Convert to type explicitly.