使用 NEST 使用 linq 查询弹性搜索

Querying elastic search with linq using NEST

有什么方法可以使用 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 月

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

简而言之,没有。

较长的答案是,ElasticLINQ 是我所知道的最接近 LINQ 提供程序但未公开 Elasticsearch API.

虽然在 LINQIQueryable<T> 等之间存在 一些 重叠。 al,以及 Elasticsearch 查询 DSL 和 REST API 公开的搜索功能,有许多查询无法用 LINQ 轻松表达,例如completion suggester query look like, or a function score query or a moving average aggregation using Holt-Winters 会是什么?

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

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

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

您今天在此处编写的确切查询在 ElasticLINQ 中运行得非常好。

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

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