【问题标题】:spring elasticsearch : how to save Map as string in index?spring elasticsearch:如何将地图保存为索引中的字符串?
【发布时间】:2020-10-28 23:54:31
【问题描述】:

我遇到了索引问题。 在我的 Spring 文档中,我有一张地图。这张地图可以包含数千条数据,因为我保存了历史记录。

private NavigableMap<String, Integer> installHistory = new TreeMap<>();

在弹性搜索中,我地图中的所有数据都是索引,我遇到了限制执行错误。

我怎么能不索引 Map 中的所有数据? 我使用弹簧 2.2 和弹簧弹性搜索 3.2.4

提前致谢。

编辑: 我升级到 spring data elastic 4.0.1 以使用 FielType.Flattened,但是 spring data elastic 4.0.1 支持最小版本的 elasticsearch 7.6.X。我的版本是7.4,不能改,因为是aws提供的最新版本。

我将字段设为瞬态,并为此地图创建了一个字符串属性。在保存我的对象之前,我将地图转换为列表并将其放入字符串变量中。

【问题讨论】:

    标签: java spring elasticsearch spring-data-elasticsearch


    【解决方案1】:

    映射被转换为 JSON 对象,其中映射键作为属性,映射值作为值。因此,您最终会存储具有数千个属性的对象,see the Elasticsearch documentation about this

    您可以使用 FieldType.Flattened

    声明 installHistory 的类型

    编辑:

    我错过了您使用的是 Spring Data Elasticsearch 3.2.x。在 4.0 中添加了对 flattened 字段类型的支持。

    那么最好的办法可能是将 Map 属性转换为 Pairs 或 Tupels 列表,其中每个 Pair 都包含映射中的一个键值对。

    【讨论】:

    • 谢谢。我做了一件很肮脏的事。我声明我的地图具有瞬态并创建了地图的字符串版本......但我将删除它并保留扁平化解决方案。谢谢
    • 我在 FieldType 列表中没有 Flattened
    【解决方案2】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-04
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 2020-07-30
    • 1970-01-01
    • 2015-01-21
    相关资源
    最近更新 更多