【问题标题】:Querying elastic search with linq using NEST使用 NEST 使用 linq 查询弹性搜索
【发布时间】:2016-03-14 17:02:30
【问题描述】:

有没有办法使用 linq 或 lambda 表达式通过 NEST 客户端查询 Elasticsearch。

我想做这样的事情:

client.Search<MyClass>(s => s.MyProperty.Contains("value") &&
                            (s.MySecondProperty == 123 ||
                             s.ThirdProperty > 12)) ;

或者

var query = from m in MyContext.MyClass
            where ...
            select m

我阅读了一些关于ElasticLinq 的信息,但它似乎不再活跃。最后一个 nuget 包于 2015 年 10 月发布

我想要做的是创建一个方法,从调用者那里获取一个表达式作为参数,并用它在弹性上搜索。调用者不应依赖 ES 或 NEST API

【问题讨论】:

    标签: c# linq elasticsearch nest


    【解决方案1】:

    简而言之,没有。

    更长的答案是,ElasticLINQ 是我所知道的最接近 LINQ 提供程序但并未公开 Elasticsearch API 的所有功能的提供程序。

    虽然LINQIQueryable&lt;T&gt; 等之间存在一些重叠。 al,以及 Elasticsearch 查询 DSL 和 REST API 所公开的搜索功能,有许多查询不能用 LINQ 轻松表达,例如completion suggester queryfunction score querymoving average aggregation using Holt-Winters 会是什么样子?

    您需要扩展 LINQ 中可用的方法并编写一个非平凡查询提供程序,所有这些都是为了将​​定义良好的查询 DSL 融入 LINQ 范例。

    就个人而言,我倾向于接受查询 DSL 和 REST API,并希望将您的表达式转换为您可以使用 NEST、Elasticsearch.Net 或 HttpClient 发送的内容。调用者仍然不需要知道请求是如何发出的。

    如果您最终编写了一个 LINQ 查询提供程序,我会非常感兴趣 :)

    【讨论】:

      【解决方案2】:

      您今天在那里编写的确切查询在 ElasticLINQ 中非常有效。

      该项目仍然存在 - 只是有时没有理由发布新版本。今天发布了一个重点版本,用于修复使用嵌套在 AND 中的 OR 生成查询(不是过滤器)的极端情况。

      【讨论】:

      • 任何支持 v5.x 的 ETA?
      • 我的工作不再涉及 .NET 或 Elasticsearch,所以我不确定在没有帮助的情况下会有任何动作。
      【解决方案3】:

      我目前正在使用 LINQ 查询提供程序库来生成 NEST 方法调用。如果有人感兴趣 - 这是 GitHub 存储库的链接 - https://github.com/VladislavRybnikov/NEST.Linq

      【讨论】:

      • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 2015-07-17
      • 2018-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-02
      • 2021-05-18
      相关资源
      最近更新 更多