我正在尝试从MVC应用程序使用NEST,但是我将请求序列化为错误:
iisexpress.exe Error: 0 : NEST POST http://localhost:9200/_search (00:00:00.8188240):
StatusCode: 400,
Method: POST,
Url: http://localhost:9200/_search,
Request: {
"$type": "Nest.SearchDescriptor`1[[System.Object, mscorlib]], Nest",
"aggs": {
"Period": {
"$type": "Nest.AggregationDescriptor`1[[System.Object, mscorlib]], Nest",
"date_histogram": {
"$type": "Nest.DateHistogramAggregationDescriptor`1[[System.Object, mscorlib]], Nest",
"field": "Timestamp",
"interval": "day",
"format": "yyyy-MM-dd"
}
}
}
}
查询非常简单:
var cs2 = new ConnectionSettings(new Uri("http://localhost:9200")).EnableTrace();
var client = new ElasticClient(cs2);
var res3 = client.Search<object>(q =>q.Aggregations(agg =>
agg.DateHistogram("DayAgg", t => t.Field("Timestamp").Interval("day"))));
完全相同的代码在控制台应用程序中可以正常工作,因此我认为这可能与序列化有关,因为在糟糕的情况下会添加“$ type”属性。
最佳答案
找到相关问题:Serialization error with Elasticsearch NEST/C#
根本原因是以下设置:
config.Formatters.JsonFormatter.SerializerSettings.TypeNameHandling = TypeNameHandling.Objects;
现在有一个支持设置的新api:SetJsonSerializerSettingsModifier
var cs2 = new ConnectionSettings(new Uri("http://localhost:9200"))
.SetJsonSerializerSettingsModifier(settings => settings.TypeNameHandling = TypeNameHandling.None)
.EnableTrace();
关于elasticsearch - ElasticSearch NEST在MVC应用程序的序列化请求中添加$ type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24966217/