在结合 NEST 评估 ElasticSearch 的过程中,我遇到了一个新问题。 问题是关于数组类型的字段加上 ES 自动支持数组类型的事实。我有一个 ProductIds 字段,它可以包含 1 或 n 个值。映射定义如下:
[…] "ProductIds" : { "type" : " integer", "store" : "yes" }, […]
如果该字段包含几个 Id,ES 中的查询结果如下所示:
ProductIds: [ 1, 2 ]
事实上,数组类型是自动的,如果字段只包含一个值,它看起来像这样:
ProductIds: 1
这种情况会导致以下问题:
我确实有一个映射到某个类的嵌套查询。在此类中,属性 ProductIds 定义为 List<int>
(我也用整数数组试过)。只要有不止一个值,这就可以很好地工作。如果该字段在 ES 中仅包含单个值,则将其保存为原始数据类型。这会导致 Newtonsoft.JSON 出错:
Connection error. at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.EnsureType(JsonReader reader, Object value, CultureInfo culture, JsonContract contract, Type targetType)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target)
那么有什么建议可以解决这个问题吗?时间差
最佳答案
您不是第一个遇到此问题的人,这里提供了解决方案: https://github.com/Mpdreamz/NEST/issues/227#issuecomment-16550076
NEST 也计划对此提供开箱即用的支持。
关于elasticsearch - NEST:如何处理包含单个值的数组字段(Newtonsoft Json 序列化错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16669385/