最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

spring-data-elasticsearch @Field注解無(wú)效的完美解決方案

 更新時(shí)間:2021年07月26日 16:03:32   作者:晴天小哥哥  
這篇文章主要介紹了spring-data-elasticsearch @Field注解無(wú)效的完美解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

前言

我看了一大堆博客和資料大多是說(shuō)這個(gè)spring的bug, 然后通過(guò)一個(gè).json的配置文件去加載,我也是真的笑了, 本來(lái)注解就是方便開(kāi)發(fā),取消配置文件的功能, 結(jié)果解決方案卻是本末倒置, 這里我奉獻(xiàn)出最正確的解決方案

一. 準(zhǔn)備實(shí)例代碼

這是實(shí)體類(lèi)代碼,及其注解

package com.gupao.springbootdemo.bean; 
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType; 
import java.util.List;
 
/**
 * 功能描述:ES的用戶(hù)
 *
 * @Author: zhouzhou
 * @Date: 2020/7/30$ 9:57$
 */
@Data
@Document(indexName = "es_user")
public class ESUser {
 
    @Id
    private Long id;
    @Field(type = FieldType.Text)
    private String name;
    @Field(type = FieldType.Integer)
    private Integer age;
    @Field(type = FieldType.Keyword)
    private List<String> tags;
    @Field(type = FieldType.Text, analyzer = "ik_max_word")
    private String desc;  
}

這是創(chuàng)建索引的代碼

boolean index = elasticsearchRestTemplate.createIndex(ESUser.class);

我們會(huì)發(fā)現(xiàn),當(dāng)執(zhí)行后, 雖然執(zhí)行成功, 但是我們?nèi)ゲ榭此饕畔⒌臅r(shí)候發(fā)現(xiàn)沒(méi)有mapping信息

二. 解決方案

1.在createIndex方法后加putMapping方法

boolean index = elasticsearchRestTemplate.createIndex(ESUser.class);
elasticsearchRestTemplate.putMapping(ESUser.class);

問(wèn)題解決,查看mapping信息就有了

2.更新版本(注: 版本更新對(duì)應(yīng)要更新es版本到7.8以上,不建議!!)

項(xiàng)目啟動(dòng)的時(shí)候,自動(dòng)創(chuàng)建索引,無(wú)需手動(dòng)調(diào)用API創(chuàng)建!!!

三. 解決思路(源碼部分,以下只是筆者解決過(guò)程)

筆者通過(guò)查看elasticsearcRestTemplate的源碼才發(fā)現(xiàn)

@Override
	public ElasticsearchPersistentEntity getPersistentEntityFor(Class clazz) {
		Assert.isTrue(clazz.isAnnotationPresent(Document.class), "Unable to identify index name. " + clazz.getSimpleName()
				+ " is not a Document. Make sure the document class is annotated with @Document(indexName=\"foo\")");
		return elasticsearchConverter.getMappingContext().getRequiredPersistentEntity(clazz);
	}

創(chuàng)建索引前會(huì)通過(guò)getMappingContext方法獲取mappingContext字段, 但是這個(gè)字段怎么賦值呢?

沒(méi)有頭緒!!!!!

筆者又轉(zhuǎn)念一想, 我們直接思考下, 我們找到@Field字段在哪里被解析, 這不就知道讀取@Field的類(lèi)和設(shè)置mappingContext的方法了!!!!

妙 啊!!!!!!

原來(lái)是

MappingBuilder這個(gè)類(lèi)對(duì)@Field進(jìn)行解析, 后來(lái)進(jìn)去發(fā)現(xiàn)@Mapping解析.json,也就是網(wǎng)上的方法解析方法也在里面, 哈哈殊途同歸, 對(duì)外提供的方法為:

看注釋?zhuān)?我就知道離真相不遠(yuǎn)了,繼續(xù)查看調(diào)用鏈, 真相大白!!!下面方法我就不多做解釋了

原來(lái)是這個(gè)putMapping這個(gè)方法啊,找了你好久!!!!

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring AOP與AspectJ的對(duì)比及應(yīng)用詳解

    Spring AOP與AspectJ的對(duì)比及應(yīng)用詳解

    這篇文章主要為大家介紹了Spring AOP與AspectJ的對(duì)比及應(yīng)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 軟件開(kāi)發(fā)基礎(chǔ)之設(shè)計(jì)模式概述

    軟件開(kāi)發(fā)基礎(chǔ)之設(shè)計(jì)模式概述

    這篇文章介紹了軟件開(kāi)發(fā)基礎(chǔ)之設(shè)計(jì)模式,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-09-09
  • 淺談java實(shí)現(xiàn)mongoDB的多條件查詢(xún)

    淺談java實(shí)現(xiàn)mongoDB的多條件查詢(xún)

    這篇文章主要介紹了java實(shí)現(xiàn)mongoDB的多條件查詢(xún),具有一定參考價(jià)值,需要的朋友可以參考下。
    2017-09-09
  • Spring框架基于AOP實(shí)現(xiàn)簡(jiǎn)單日志管理步驟解析

    Spring框架基于AOP實(shí)現(xiàn)簡(jiǎn)單日志管理步驟解析

    這篇文章主要介紹了Spring框架基于AOP實(shí)現(xiàn)簡(jiǎn)單日志管理步驟解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • PostMan傳@RequestParam修飾的數(shù)組方式

    PostMan傳@RequestParam修飾的數(shù)組方式

    這篇文章主要介紹了PostMan傳@RequestParam修飾的數(shù)組方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Centos中安裝jdk案例講解

    Centos中安裝jdk案例講解

    這篇文章主要介紹了Centos中安裝jdk案例講解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Spring AOP失效的常見(jiàn)場(chǎng)景分析

    Spring AOP失效的常見(jiàn)場(chǎng)景分析

    Spring的AOP(面向切面編程)是一種強(qiáng)大的技術(shù),用于在應(yīng)用程序中實(shí)現(xiàn)橫切關(guān)注點(diǎn)的模塊化,雖然Spring的AOP在大多數(shù)情況下都是有效的,但在某些場(chǎng)景下可能會(huì)失效,下面來(lái)分析Spring AOP失效的常見(jiàn)場(chǎng)景,需要的朋友可以參考下
    2024-01-01
  • java中計(jì)算字符串長(zhǎng)度的方法及u4E00與u9FBB的認(rèn)識(shí)

    java中計(jì)算字符串長(zhǎng)度的方法及u4E00與u9FBB的認(rèn)識(shí)

    字符串采用unicode編碼的方式時(shí),計(jì)算字符串長(zhǎng)度的方法找出UNICODE編碼中的漢字的代表的范圍“\u4E00” 到“\u9FBB”之間感興趣的朋友可以參考本文,或許對(duì)你有所幫助
    2013-01-01
  • Java 8 Stream.distinct() 列表去重的操作

    Java 8 Stream.distinct() 列表去重的操作

    這篇文章主要介紹了Java 8 Stream.distinct() 列表去重的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • 使用filter實(shí)現(xiàn)url級(jí)別內(nèi)存緩存示例

    使用filter實(shí)現(xiàn)url級(jí)別內(nèi)存緩存示例

    這篇文章主要介紹了使用filter實(shí)現(xiàn)url級(jí)別內(nèi)存緩存示例,只需要一個(gè)靜態(tài)類(lèi),在filter中調(diào)用,也可以全部寫(xiě)到filt里面。可以根據(jù)查詢(xún)參數(shù)分別緩存,需要的朋友可以參考下
    2014-03-03

最新評(píng)論

樟树市| 乌鲁木齐市| 宣城市| 花莲县| 三台县| 额济纳旗| 视频| 英山县| 藁城市| 潮州市| 房山区| 利津县| 凯里市| 海淀区| 手游| 宝应县| 边坝县| 乐陵市| 盐边县| 凯里市| 青川县| 汶上县| 平和县| 高邮市| 墨玉县| 栾川县| 文安县| 岫岩| 大足县| 崇仁县| 泊头市| 山丹县| 当雄县| 龙南县| 平谷区| 长葛市| 科技| 仲巴县| 库伦旗| 腾冲县| 湘西|