Я новичок в 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 (например,
string, number, boolean, null) для правильной десериализации. Чтобы исправить это
ошибка, либо измените JSON на значение примитива JSON (например, строку,
number, boolean, null) или измените десериализованный тип так, чтобы он
нормальный тип .NET (например, не примитивный тип, такой как целое число, не
тип коллекции, такой как массив или список), который может быть десериализован
из объекта JSON. JsonObjectAttribute также можно добавить к типу
заставить его десериализовать из объекта JSON. Дорожка
'hit.total.value', строка 1, позиция 115. ”
Я думал, что 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"))));
Может кто-нибудь объяснить, что я делаю не так?