spring elasticsearch:如何将 Map 保存为索引中的字符串?

spring elasticsearch : how to save Map as string in index?

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

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

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

我该怎么做才能不索引地图中的所有数据? 我使用 spring 2.2 和 spring elastic search 3.2.4

提前致谢。

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

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

您是否尝试过文档中提供的这些自定义转换器 https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#elasticsearch.mapping.meta-model.conversions

地图转换为 JSON 对象,该对象将地图键作为属性,将地图值作为值。所以你最终存储了具有数千个属性的对象,see the Elasticsearch documentation about this.

您可以使用 FieldType.Flattened

声明 installHistory 的类型

编辑:

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

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