在反序列化结果期间出现Elasticsearch.Net.UnexpectedElasticsearchClientException

时间:2019-04-16 08:54:36

标签: c# elasticsearch nest

我有一个C#项目,我想向我的弹性搜索服务器发送请求。 这是我的连接和弹性搜索客户端:

ConnectionSettings connectionSettings;
ElasticClient elasticClient;
connectionSettings = new ConnectionSettings(new 
Uri("http://192.168.2.197:9292/"));        
elasticClient = new ElasticClient(connectionSettings);

这是我的要求:

var response = elasticClient.Search<NewsDataModel>(s => s
.Index("news-index")
.Type("title")
.Query(q => q.QueryString(qs => qs.Query("ny"))));

这是我的模特:

public class NewsDataModel  {      
public string _id { get; set; }     
public string title { get; set; }     
public string content { get; set; }       
public string summary { get; set; }
}

但是当我发送请求时,出现此异常:

  

Elasticsearch.Net.UnexpectedElasticsearchClientException:'无法反序列化当前JSON对象(例如{“ name”:“ value”})为类型   'System.Int64',因为该类型需要JSON基本值(例如   字符串,数字,布尔值,null)正确反序列化。       要解决此错误,请将JSON更改为JSON基本值(例如,字符串,数字,布尔值,空值)或更改反序列化类型   因此它是普通的.NET类型(例如,不是像   整数,而不是可以是   从JSON对象反序列化。也可以添加JsonObjectAttribute   类型,以强制其从JSON对象反序列化。       路径“ hits.total.value”,第1行,位置113。”

如何解决此异常?

2 个答案:

答案 0 :(得分:10)

我遇到了同样的问题,看来NEST 6.6.0库与Elasticsearch 7.0不兼容。 我不得不将NEST更新为7.0.0(此时为alpha)。

答案 1 :(得分:0)

我在使用 NEST 6.8 并连接到 ES 7.9 时遇到了同样的问题。在 SearchDescriptor 中,调用 TotalHitsAsInteger(true) 方法使其工作。

        var searchResponse =  esClient.Search<_Doc>(s => s
            .Query(pq => pq.Term(new Field("type", null), "<type value>"))
            .Index("<Index Name>")
            .Size(3)
            .TotalHitsAsInteger(true)
        );