有没有办法使用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
答案 0 :(得分:4)
简而言之,没有。
答案越长, ElasticLINQ 最接近我所知道的LINQ提供程序,但不会公开Elasticsearch API的所有功能。
虽然LINQ
,IQueryable<T>
等之间存在某些重叠。 al,以及Elasticsearch查询DSL和REST API公开的搜索功能,有许多查询无法用LINQ轻松表达,例如completion suggester query的外观,function score query或moving average aggregation using Holt-Winters是什么意思?
您需要扩展LINQ中可用的方法并编写非平凡的查询提供程序,所有这些都是为了将明确定义的查询DSL纳入LINQ范例。
就个人而言,我倾向于接受查询DSL和REST API,并希望将您的Expression转换为可以使用NEST,Elasticsearch.Net或HttpClient
发送的内容。呼叫者仍然不需要知道请求是如何进行的。
如果您最终编写LINQ查询提供程序,我会非常感兴趣:)
答案 1 :(得分:4)
你今天在那里写的确切查询在ElasticLINQ中运行得非常好。
该项目仍然存在 - 有时候没有理由推出新版本。今天有一个点发布用于修复使用嵌套在AND中的OR生成查询(不是过滤器)的角点。