【问题标题】:Is it possible to use ElasticSearch.Net or Nest for dynamic response是否可以使用 ElasticSearch.Net 或 Nest 进行动态响应
【发布时间】:2018-11-26 13:54:14
【问题描述】:

有没有没有泛型的client.Read(...)?我没有找到,Nest nor ElasticSearch.Net 也没有。


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

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

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

【问题讨论】:

    标签: elasticsearch nest elasticsearch-5 elasticsearch-net


    【解决方案1】:

    如果响应是真正动态的,您可以使用dynamic 作为泛型类型。

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

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

    【讨论】:

      【解决方案2】:

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

      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.
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-19
        • 2021-10-13
        • 2018-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多