c# - Elasticsearch NEST 和基本搜索查询
问题描述
我是 Elasticsearch 的新手,我正在使用 NEST。当我在浏览器 (host/logstash-2019.03.17/_search?pretty) 中运行查询时,我得到以下结果:
{
"took" : 138,
"timed_out" : false,
"shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 10,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "logstash-2019.03.17",
"_type" : "logevent",
"_id" : "aa7djGkB1zvCMljS8jPd",
"_score" : 1.0,
"_source" : {
"@timestamp" : "2019-03-17T18:15:43.9506399Z",
"level" : "Info",
"message" : "Attempting to get results from ElasticSearch",
"logger" : "App.Api.Controllers.MyController"
}
}, OTHER HITS IN THE SAME FORMAT
但是,当我尝试使用 ElasticClient 查询相同的索引时,出现以下异常:
Elasticsearch.Net.UnexpectedElasticsearchClientException:“无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型 'System.Int64',因为该类型需要 JSON 原始值(例如字符串、数字、布尔值、null)正确反序列化。要修复此错误,请将 JSON 更改为 JSON 原始值(例如字符串、数字、布尔值、null)或将反序列化类型更改为正常的 .NET 类型(例如,不是整数等原始类型,而不是集合类型像数组或列表)可以从 JSON 对象反序列化。JsonObjectAttribute 也可以添加到类型中以强制它从 JSON 对象反序列化。路径 'hits.total.value',第 1 行,位置 115。”</p>
我认为 NEST 能够正确地自动反序列化 JSON,条件是它提供了一个属性对应于“_source”对象字段的类。至少这是您可以从本教程中推断出的。
这是我的 POCO 类,后面是引发异常的查询:
public class Logevent
{
public string Id { get; set; }
public DateTime Timestamp { get; set; }
public string Level { get; set; }
public string Message { get; set; }
public string Logger { get; set; }
}
var client = new ElasticClient();
var searchResponse = client.Search<Logevent>(s => s.Index("logstash-2019.03.17").Query(q => q.Match(m => m.Field(f => f.Level).Query("message"))));
谁能解释我做错了什么?
解决方案
看起来您正在使用更新版本的 Elasticsearch(可能是 7.0.0 预发布版本之一?),其中字段total
不再只是一个Int64
值
"total" : {
"value" : 10,
"relation" : "eq"
}
NEST 6.x 不处理这个问题,但是 NEST 7.x 会在它发布时处理。目前,我建议使用最新的 Elasticsearch 6.x,目前是 6.6.2。
NEST 的主要版本与 Elasticsearch 的主要版本相关联,因此
- NEST 5.x -> 弹性搜索 5.x
- NEST 6.x -> Elasticsearch 6.x
- 等等
但我建议让 NEST 及时了解专业内的未成年人;我们在一个专业内保持向后二进制兼容性以帮助解决这个问题。
推荐阅读
- angular - Angular 5 - Api Swagger body responseType blob
- javascript - Javascript:更改输入文件类型?
- java - Thymeleaf:通过索引从数组列表中获取项目
- javascript - Joi - 从数组的第一个元素访问对象项属性
- windows - Mattermost Webhook (Windows):使用 cURL 将表格发送到频道
- powershell - 如何使用 PowerShell 从 Azure 函数查询 Azure 表
- amazon-web-services - 如何在 EC2 上定义 ssh 主机密钥以避免连接时验证失败?
- javascript - Slick - 带有上一张/下一张幻灯片名称的箭头
- python-sphinx - SPHINX - numref 适用于 HTML 但不适用于 LaTex
- spring-boot - PowerMockito 没有在我的代码中运行,这是我的代码