,,spring-data-elasticsearch @Field注解无效的完美解决方案

,,spring-data-elasticsearch @Field注解无效的完美解决方案

本文主要介绍了Spring-Data-elastic search @ field无效标注的完美解决方案,具有很好的参考价值。希望对你有帮助。如有错误或不足之处,请不吝赐教。

前言

我看了很多博客和资料,大部分都是关于这个spring bug的,然后通过一个. json配置文件加载它。我也真的笑了。本来标注是为了方便开发,取消配置文件的功能,结果解决方案本末倒置。这里我提供最正确的解决方案。

一. 准备实例代码

这是实体类代码及其注释。

包com . gupao . spring boot demo . bean;

进口龙目岛。数据;

导入org . spring framework . data . annotation . id;

导入org . spring framework . data . elastic search . annotations . document;

导入org . spring framework . data . elastic search . annotations . field;

导入org . spring framework . data . elastic search . annotations . field type;

导入Java . util . list;

/**

*功能描述:专家系统的用户

*

* @作者:周舟

* @ Date:2020/7/309:57

*/

@数据

@Document(indexName='es_user ')

公共类ESUser {

@Id

私有长id;

@Field(type=FieldType。正文)

私有字符串名称;

@Field(type=FieldType。整数)

私有整数年龄;

@Field(type=FieldType。关键词)

私有ListString标记;

@Field(type=FieldType。Text,analyzer='ik_max_word ')

私弦desc;

}

这是创建索引的代码。

boolean index=elasticsearchresttemplate . create index(esuser . class);

我们会发现,执行之后,虽然执行成功了,但是当我们查看索引信息的时候,却发现没有映射信息。

二. 解决方案

1.在createIndex方法后加putMapping方法

boolean index=elasticsearchresttemplate . create index(esuser . class);

elasticsearchresttemplate . put mapping(esuser . class);

要解决该问题,请检查映射信息。

2.更新版本(注: 版本更新对应要更新es版本到7.8以上,不建议!!)

项目启动时,索引是自动创建的,无需手动调用API创建!

三. 解决思路(源码部分,以下只是笔者解决过程)

我是看了elasticsearcRestTemplate的源代码才知道的。

@覆盖

public ElasticsearchPersistentEntity getpersistententity for(Class clazz){

assert . is true(clazz . isanotationpresent(document . class),'无法识别索引名称。'clazz.getSimpleName()

不是文档。请确保document类用@Document(indexName='foo ')”进行了批注;

返回elasticsearchconverter . getmappingcontext()。getRequiredPersistentEntity(clazz);

}

在创建索引之前,会通过getMappingContext方法获取mappingContext字段,但是这个字段怎么赋值呢?

没有头绪!!!!!

转念一想,还是直接想吧。我们发现@Field字段在哪里被解析,所以我们知道如何读取@Field的类并设置mappingContext!

精彩!

原来是

MappingBuilder是一个解析@Field的类。后来进去的时候发现@ mappingparsing.json,就是在线的方法解析方法也在里面。哈哈,殊途同归。外部方法有:

看看评论,就知道离真相不远了。继续查通话链,真相大白!下面的方法我就不解释了。

就是这个putMapping方法。我找了你很久了!

以上个人经历,希望能给大家一个参考,也希望大家多多支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: