我使用的是springboot 2.2.6、Elastic Search 5.6.13,我决定升级到springboot 2.4.1、Elastic Search 7.10。我在ES中存储复杂的文档,以枚举作为值和映射键。对于枚举和字符串(加上自定义序列化器)之间的所有序列化,我使用的是自定义实体映射器和自定义配置的jackson ObjectMapper。
在ES4中,ElasticsearchEntityMapper接口已经被删除。并且所有转换都应该作为转换器来实现。所以我为每个枚举实现了转换器,它可以正确地写入ES。
但它们没有被正确读取。我发现了几个问题,但我想从一个具体的问题开始。未将映射键转换回枚举。它们被作为字符串读取。
我调试了spring boot代码,寻找我应该实现的特定接口,但我找不到任何。
有什么想法吗?
https://docs.spring.io/spring-data/elasticsearch/docs/current-snapshot/reference/html/#elasticsearch-migration-guide-3.2-4.0.jackson-删除
经过一些“反复试验”的过程,我想出了一个解决办法。你可能会觉得这是个变通办法,但我找不到更好的解决办法。基本上,您应该为属性注册一个自定义转换器,并在其中使用ObjectMapper.ConvertValue()将映射
public class RestClientConfig extends AbstractElasticsearchConfiguration {
@Override
public ElasticsearchCustomConversions elasticsearchCustomConversions() {
return new ElasticsearchCustomConversions(List.of(
MapToTypeMap1.INSTANCE
));
}
@ReadingConverter
enum MapToTypeMap1 implements Converter<Map<String, Object>, Map<MyEnum, MyType>> {
INSTANCE;
@Override
public Map<MyEnum, MyType> convert(Map<String, Object> source) {
final ObjectMapper mapper = Jackson2ObjectMapperBuilder.json().build();
final TypeFactory typeFactory = mapper.getTypeFactory();
final JavaType javaType = typeFactory.constructParametricType(Map.class, MyEnum.class, MyType.class);
return mapper.convertValue(source, javaType);
}
}
我有上面的列举 @JsonValue公共字符串getValue(){return value;} 部分和一个示例测试类,如。。。 公开课Foo{ 这个测试类打印出来 @jsonValue在作为map键的枚举字段上使用时不工作。 序列化映射时是否有方法将此枚举用作键? 谢谢
这是回应的一部分 我有联系人号码和名字 现在我的第二个查询->我正在使用术语筛选器查询上面的联系电话
如果搜索字符串和目标对象最后有以下任何字符,那么它就不起作用。s y e 在我们的应用程序中,如果用户名为Granny,Smith。它没有搜索奶奶的任何记录,因为它以y结尾。s和e的情况也是如此,即詹姆斯、凯蒂。
我有一个简单的<code>csv<code>文件,它有4个字段,serial_num、post_code、lat、lon,例如: 我需要批量插入到< code>elasticsearch中。lat lon字段需要在单个geo_point字段中定义,因此我创建了如下映射: > 索引为串行数据 类型为widget }} 我试图使用来插入数据,因为我认为我有一个定义的映射。如果我将lat定义为双精度或l
首先,这就是为什么这个问题不是重复的: 我知道在SO上已经问了很多关于将一个转换为另一个的问题,我甚至自己回答了其中一个问题,但是我在这个主题上发现的所有问题都有一些比较不同枚举值的方法(无论是通过名称还是按价值)。在我的特殊情况下,我不知道值,名字也不匹配。 作为我正在做的一个名为ADONETHelper的GitHub项目的一部分,该项目旨在最大限度地减少与Ado一起工作时的代码重复。Net中,
我正在使用聚合来根据其他字段的总和对一个字段进行分组。 它正在工作,但输出与我从数据库查询得到的结果不相似。 ES查询: 输出: "domain_agg":{"doc_count_error_upper_bound": 9,"sum_other_doc_count": 1442,"存储桶": [ { "key":"doc_count","doc_count": 2,"domain_store_co