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

Ous*_*ama 5 c# linq elasticsearch nest

有什么方法可以使用 linq 或 lambda 表达式通过 NEST 客户端查询 Elasticsearch。

我想做这样的事情:

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

或者

var query = from m in MyContext.MyClass
            where ...
            select m
Run Code Online (Sandbox Code Playgroud)

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

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

Rus*_*Cam 4

简而言之,不。

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

虽然, et 之间有一些重叠。以及 Elasticsearch 查询 DSL 和 REST API 公开的搜索功能,有许多查询无法使用 LINQ 轻松表达,例如完成建议查询是什么样子,或者使用 Holt 的函数得分查询移动平均聚合温特斯LINQIQueryable<T>

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

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

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