我有一个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。”
如何解决此异常?
答案 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)
);