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

时间:2016-03-14 17:02:30

标签: c# linq elasticsearch 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月

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

2 个答案:

答案 0 :(得分:4)

简而言之,没有。

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

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

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

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

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

答案 1 :(得分:4)

你今天在那里写的确切查询在ElasticLINQ中运行得非常好。

该项目仍然存在 - 有时候没有理由推出新版本。今天有一个点发布用于修复使用嵌套在AND中的OR生成查询(不是过滤器)的角点。