NEST:从 ElasticSearch 中的搜索响应 (ISearchResponse) 获取数据时出现问题
NEST : Issue in getting data from search response (ISearchResponse) in ElasticSearch
我使用 NEST 编写了一个 C# 代码,它对我的 ES 数据库进行搜索查询。我可以看到这些查询成功并通过 Postman 给出 json 响应正文。我想在我的代码中使用这些响应。例如,
ISearchResponse<class> myquery = client.Search<class>(...)
(一些成功的 api 调用)
响应正文类似于:
{
"took": 5,
...
...
"hits": {
"max_score": 1.2,
"hits": [
{
"_index": "sample",
...
"_source": {
"name": "generic name",
"profession": "lawyer",
...
}
}
]
}
"aggs" : {
...
}
}
我可以通过 myquery.Took
获得这里的 "took" 值。同样,我可以看到 ISearchResponse<>
的定义包含 MaxScore
、TimedOut
等
的数据成员
我的问题是,如果我想获取 name
字段或 aggr
中的某个存储桶的值,以同样的方式在我的代码中使用。我怎样才能做到这一点?请帮助。
注意:
文档只解释了如何处理错误响应,我可以在调试器中看到 .Documents
可能以某种方式存储它,但我无法检索数据(或者我可能不明白如何检索)。因此,如果是这种情况,还请说明如何从 .Documents
获取它。
每个命中的 "_source"
JSON 对象将被反序列化为类型 T
,指定为 Search<T>
上的泛型类型参数。在您的示例中,"_source"
将被反序列化为 class
,因此只需为 "_source"
上的属性定义 class
上的属性。例如
public class MyDocument
{
[PropertyName(Name = "name")]
public string Name {get;set;}
[PropertyName(Name = "profession")]
public string Profession {get;set;}
}
var response = client.Search<MyDocument>();
我使用 NEST 编写了一个 C# 代码,它对我的 ES 数据库进行搜索查询。我可以看到这些查询成功并通过 Postman 给出 json 响应正文。我想在我的代码中使用这些响应。例如,
ISearchResponse<class> myquery = client.Search<class>(...)
(一些成功的 api 调用)
响应正文类似于:
{
"took": 5,
...
...
"hits": {
"max_score": 1.2,
"hits": [
{
"_index": "sample",
...
"_source": {
"name": "generic name",
"profession": "lawyer",
...
}
}
]
}
"aggs" : {
...
}
}
我可以通过 myquery.Took
获得这里的 "took" 值。同样,我可以看到 ISearchResponse<>
的定义包含 MaxScore
、TimedOut
等
我的问题是,如果我想获取 name
字段或 aggr
中的某个存储桶的值,以同样的方式在我的代码中使用。我怎样才能做到这一点?请帮助。
注意:
文档只解释了如何处理错误响应,我可以在调试器中看到 .Documents
可能以某种方式存储它,但我无法检索数据(或者我可能不明白如何检索)。因此,如果是这种情况,还请说明如何从 .Documents
获取它。
每个命中的 "_source"
JSON 对象将被反序列化为类型 T
,指定为 Search<T>
上的泛型类型参数。在您的示例中,"_source"
将被反序列化为 class
,因此只需为 "_source"
上的属性定义 class
上的属性。例如
public class MyDocument
{
[PropertyName(Name = "name")]
public string Name {get;set;}
[PropertyName(Name = "profession")]
public string Profession {get;set;}
}
var response = client.Search<MyDocument>();