将对象序列化为JSON,然后使用它在弹性搜索中使用NEST发送查询

在使用NEST进行查询时,我感到有点困惑和沮丧,因为它看起来很受欢迎。 我在使用标准JSON时查询没有问题,所以我想知道是否有某种方法可以使用JSON对象进行查询,我在下面有代码

var query = "bkala"; var q = new { query = new { text = new { _all = "jane" } } }; var qJson = JsonConvert.SerializeObject(q); var hits = client.Search(qJson); 

但是,我收到错误“无法从类型字符串转换为System.Func,Nest.ISearchRequest”

如果有人知道如何使用JSON对象进行简单查询,那将是非常棒的,提前加油。

NEST和Elasticsearch.Net是NEST使用的低级客户端,可以灵活地查询。 使用NEST,您有几种不同的方式:

NEST – 高级客户

1.Fluent API

 var query = "bkala"; var searchResult = client.Search(s => s .Query(q => q .Match(m => m .Field("_all") .Query(query) ) ) ); 

如上所述,此API使用lambda表达式来定义一个流畅的接口,该接口模仿Elasticsearch json API和查询DSL的结构。

2.Object Initializer语法

 var query = "bkala"; var request = new SearchRequest { Query = new MatchQuery { Field = "_all", Query = query } }; var searchResult = client.Search(request); 

如果不是lambda表达式,那么您始终可以使用特定搜索类型定义搜索。

Elasticsearch.Net – 低级客户端

如果您想使用匿名类型(根据您的问题),json字符串或查询的字节表示进行查询,那么您可以使用低级客户端Elasticsearch.Net来实现此目的。 低级客户端通过.LowLevel属性在高级客户端上.LowLevel

1.匿名类型

 var query = new { query = new { match = new { _all = new { query = "bkala" } } } }; var searchResult = client.LowLevel.Search>(query); 

在高级客户端上使用低级客户端意味着您仍然可以利用Json.NET来反序列化搜索结果; 在此示例中,可以通过searchResult.Body访问搜索响应

2.Json字符串

 var query = @" { ""query"": { ""match"": { ""_all"": { ""query"": ""bkala"" } } } }"; var searchResult = client.LowLevel.Search>(query); 

3.Byte数组

 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>(bytes); 

所有上述方法都产生以下查询

 { "query": { "match": { "_all": { "query": "bkala" } } } } 

查看github repo上的入门指南以及Elastic网站上的文档 。 我们一直致力于改进文档,对于您认为我们缺乏的领域,PR非常受欢迎:)