3

在结合 NEST 评估 ElasticSearch 时,我遇到了一个新问题。问题在于数组类型的字段以及 ES 中自动支持数组类型的事实。我有一个字段 ProductIds 可以包含 1 或 n 个值。映射定义如下:

[…]
    “产品编号”:{
        “类型”:“整数”,
        “商店”:“是的”
    },
[…]

如果该字段包含几个 Id,则 ES 中的查询结果如下所示:

产品编号:[
    1、
    2
]

事实上,数组类型是自动的,如果它只包含一个值,则该字段看起来像这样:

    产品编号:1

这种情况会导致以下问题:我确实有一个映射到某个类的嵌套查询。在此类中,属性 ProductIds 定义为 a List<int>(我也尝试使用整数数组)。只要有多个值,它就可以很好地工作。如果该字段在 ES 中仅包含一个值,则将其保存为原始数据类型。这会导致 Newtonsoft.JSON 中出现错误:

连接错误。在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.EnsureType(JsonReader 阅读器,对象值,CultureInfo 文化,JsonContract 合同,类型 targetType)

在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader 阅读器,类型 objectType,JsonContract 合同,JsonProperty 成员,JsonContainerContract containerContract,JsonProperty containerMember,对象现有值)

在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty 属性,JsonConverter propertyConverter,JsonContainerContract containerContract,JsonProperty containerProperty,JsonReader 阅读器,对象目标)

那么有什么建议可以解决这个问题吗?TIA

4

1 回答 1

4

您不是第一个遇到此问题的人,此处提供了解决方案: https ://github.com/Mpdreamz/NEST/issues/227#issuecomment-16550076

也计划在 NEST 中对此提供开箱即用的支持。

于 2013-05-26T08:46:17.043 回答