是否可以使用ElasticSearch.Net或Nest进行动态响应

时间:2018-11-26 13:54:15

标签: elasticsearch nest elasticsearch-5 elasticsearch-net

是否有没有泛型的client.Read(...)?我在Nest nor ElasticSearch.Net中都找不到。


1.5版的IDocument可以解决我的问题,但是我无法在Elasticsearch5.5中使用该版本。

ElasticSearch.Net和Nest的所有示例(版本5和6)都要求我在编译时就知道响应的格式。例如。 Read<Customer>(...)

我的问题是我们不知道数据库的格式,我们也不知道输出的格式;但它们应该都是可配置的。

2 个答案:

答案 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.