NEST和Elasticsearch.Net是NEST在后台使用的低级客户端,可以灵活地查询。使用NEST,您有两种不同的方式:
NEST-高级客户
1.Fluent API
var query = "bkala";var searchResult = client.Search<Mydocument>(s => s .Query(q => q .Match(m => m .Field("_all") .Query(query) ) ));如上所述,此API使用lambda表达式来定义一个流畅的接口,该接口模仿Elasticsearch json API和查询DSL的结构。
2.对象初始化语法
var query = "bkala";var request = new SearchRequest<Mydocument>{ Query = new MatchQuery {Field = "_all", Query = query }};var searchResult = client.Search<Mydocument>(request);如果不是lambda表达式,那么您始终可以使用特定搜索类型定义搜索。
Elasticsearch.Net-低级客户端
如果您想使用匿名类型(根据您的问题),json字符串或查询的字节表示形式进行查询,则可以使用低级客户端Elasticsearch.Net来实现。通过
.LowLevel属性,低级客户端在高级别客户端上公开
1,匿名类型
var query = new{ query = new { match = new { _all = new { query = "bkala" } } }};var searchResult = client.LowLevel.Search<SearchResponse<Mydocument>>(query);在高级客户端上使用低级客户端意味着您仍然可以利用Json.NET对搜索结果进行反序列化;在此示例中,可以通过以下方式访问搜索响应
searchResult.Body
2.杰森弦
var query = @"{ ""query"": { ""match"": { ""_all"": { ""query"": ""bkala"" } } }}";var searchResult = client.LowLevel.Search<SearchResponse<Mydocument>>(query);3.字节数组
var bytes = new byte[] { 123, 13, 10, 32, 32, 34, 113, 117, 101, 114, 121, 34, 58, 32, 123, 13, 10, 32, 32, 32, 32, 34, 109, 97, 116, 99, 104, 34, 58, 32, 123, 13, 10, 32, 32, 32, 32, 32, 32, 34, 95, 97, 108, 108, 34, 58, 32, 123, 13, 10, 32, 32, 32, 32, 32, 32, 32, 32, 34, 113, 117, 101, 114, 121, 34, 58, 32, 34, 98, 107, 97, 108, 97, 34, 13, 10, 32, 32, 32, 32, 32, 32, 125, 13, 10, 32, 32, 32, 32, 125, 13, 10, 32, 32, 125, 13, 10, 125 };var searchResult = client.LowLevel.Search<SearchResponse<Mydocument>>(bytes);以上所有方法都会产生以下查询
{ "query": { "match": { "_all": { "query": "bkala" } } }}请查看github存储库上的入门指南以及Elastic网站上的文档。我们一直在努力改善文档,在您认为我们缺乏的领域,PR受到了欢迎:)



