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

Is it possible to use ElasticSearch.Net or Nest for dynamic response

有没有没有泛型的client.Read(...)?我在 Nest nor ElasticSearch.Net.

中都没有找到 none

版本 1.5 有一个 IDocument 可能会解决我的问题,但我无法在 Elasticsearch5.5 中使用该版本。

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

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

如果响应确实是动态的,您可以使用 dynamic 作为通用类型。

在 5.x 中,这将是 Json.NET 的 JObject 类型(因此,如果您愿意,可以改用 JObject)。

在 6.x 中,dynamic 也可以工作,但实际类型将是内部 JObject 类型。如果您更愿意使用 Json.NET 的 JObject 类型,您可以 hook up Json.NET as the serializer using the NEST.JsonNetSerializer nuget package 用作文档的序列化程序,然后根据 5.x.

(回答我自己的问题感觉很奇怪,但我想展示结果代码以供将来参考。)

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.