将对象序列化为JSON,然后使用它在使用NEST的弹性搜索中发送查询
本文关键字:搜索 查询 NEST 序列化 对象 JSON 然后 | 更新日期: 2023-09-27 18:13:25
当涉及到使用NEST查询时,我感到有点困惑和沮丧,因为它似乎非常偶然。我在使用标准JSON时查询没有问题,所以我想知道是否有一些方法可以使用JSON对象进行查询,我在
下面有代码var query = "bkala";
var q = new
{
query = new
{
text = new
{
_all = "jane"
}
}
};
var qJson = JsonConvert.SerializeObject(q);
var hits = client.Search<Users>(qJson);
然而,我得到错误"不能从类型字符串转换到系统。函数,巢。ISearchRequest "
如果有人知道我如何使用JSON对象简单地查询,那将是非常棒的,提前干杯。
NEST和Elasticsearch。Net是NEST在幕后使用的底层客户端,它可以灵活地选择查询方式。使用NEST,您有几种不同的方法:
NEST -高级客户端
1。流利的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。Json字符串
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 repo上的入门指南以及Elastic网站上的文档。我们一直在努力改进文档,pr非常欢迎您在您认为我们缺乏的地方:)