日本电影一区二区_日本va欧美va精品发布_日本黄h兄妹h动漫一区二区三区_日本欧美黄色

搜索引擎ORM框架Easy-Es(搜索引擎 框架)

項(xiàng)目簡(jiǎn)介

Easy-Es(簡(jiǎn)稱EE) 是一款基于ElasticSearch(簡(jiǎn)稱Es)官方提供的RestHighLevelClient打造的ORM開(kāi)發(fā)框架,在RestHighLevelClient的基礎(chǔ)上,只做增強(qiáng)不做改變,為簡(jiǎn)化開(kāi)發(fā)、提高效率而生,您如果有用過(guò)MyBatis-Plus(簡(jiǎn)稱MP),那么您基本可以零學(xué)習(xí)成本直接上手EE,EEMPEs平替版,在有些方面甚至比MP更簡(jiǎn)單,同時(shí)也融入了更多Es獨(dú)有的功能,助力您快速實(shí)現(xiàn)各種場(chǎng)景的開(kāi)發(fā)。

項(xiàng)目地址

  • Easy-Es Gitee:gitee.com/dromara/eas…
  • Elasticsearch Download:www.elastic.co/cn/download…

Easy-Es自身優(yōu)勢(shì)

  • 全自動(dòng)索引托管: 全球開(kāi)源首創(chuàng)的索引托管模式,開(kāi)發(fā)者無(wú)需關(guān)心索引的創(chuàng)建更新及數(shù)據(jù)遷移等繁瑣步驟,索引全生命周期皆可托管給框架,由框架自動(dòng)完成,過(guò)程零停機(jī),用戶無(wú)感知,徹底解放開(kāi)發(fā)者;
  • 屏蔽語(yǔ)言差異: 開(kāi)發(fā)者只需要會(huì)MySQL語(yǔ)法即可使用Es,真正做到一通百通,無(wú)需學(xué)習(xí)枯燥易忘的Es語(yǔ)法,Es使用相對(duì)MySQL較低頻,學(xué)了長(zhǎng)期不用也會(huì)忘,沒(méi)必要浪費(fèi)這時(shí)間.開(kāi)發(fā)就應(yīng)該專注于業(yè)務(wù),省下的時(shí)間去擼鐵,去陪女朋友陪家人,不做資本家的韭菜;
  • 代碼量極少: 與直接使用RestHighLevelClient相比,相同的查詢平均可以節(jié)省3-5倍左右的代碼量
  • 零魔法值: 字段名稱直接從實(shí)體中獲取,無(wú)需輸入字段名稱字符串這種魔法值,提高代碼可讀性,杜絕因字段名稱修改而代碼漏改帶來(lái)的Bug;
  • 零額外學(xué)習(xí)成本: 開(kāi)發(fā)者只要會(huì)國(guó)內(nèi)最受歡迎的Mybatis-Plus語(yǔ)法,即可無(wú)縫遷移至EE,EE采用和前者相同的語(yǔ)法,消除使用者額外學(xué)習(xí)成本,直接上手;
  • 降低開(kāi)發(fā)者門檻: Es通常需要中高級(jí)開(kāi)發(fā)者才能駕馭,但通過(guò)接入EE,即便是只了解ES基礎(chǔ)的初學(xué)者也可以輕松駕馭ES完成絕大多數(shù)需求的開(kāi)發(fā),可以提高人員利用率,降低企業(yè)成本。

特性

  • 無(wú)侵入:只做增強(qiáng)不做改變,引入它不會(huì)對(duì)現(xiàn)有工程產(chǎn)生影響,如絲般順滑;
  • 損耗小:?jiǎn)?dòng)即會(huì)自動(dòng)注入基本CURD,性能基本無(wú)損耗,直接面向?qū)ο蟛僮鳎?/li>
  • 強(qiáng)大的 CRUD 操作:內(nèi)置通用Mapper,僅僅通過(guò)少量配置即可實(shí)現(xiàn)大部分CRUD操作,更有強(qiáng)大的條件構(gòu)造器,滿足各類使用需;
  • 支持 Lambda 形式調(diào)用:通過(guò)Lambda表達(dá)式,方便的編寫各類查詢條件,無(wú)需再擔(dān)心字段寫錯(cuò)段;
  • 支持主鍵自動(dòng)生成:支持 2 種主鍵策略,可自由配置,完美解決主鍵問(wèn)題;
  • 支持 ActiveRecord 模式:支持ActiveRecord形式調(diào)用,實(shí)體類只需繼承Model類即可進(jìn)行強(qiáng)大的 CRUD操作;
  • 支持自定義全局通用操作:支持全局通用方法注入( Write once, use anywhere );
  • 內(nèi)置分頁(yè)插件:基于RestHighLevelClient物理分頁(yè),開(kāi)發(fā)者無(wú)需關(guān)心具體操作,且無(wú)需額外配置插件,寫分頁(yè)等同于普通List查詢,且保持和PageHelper插件同樣的分頁(yè)返回字段,無(wú)需擔(dān)心命名影響;
  • MySQL功能全覆蓋MySQL中支持的功能通過(guò)EE都可以輕松實(shí)現(xiàn);
  • 支持ES高階語(yǔ)法:支持高亮搜索,分詞查詢,權(quán)重查詢, Geo地理位置查詢、IP查詢、聚合查詢等高階語(yǔ)法;
  • 良好的拓展性:底層仍使用RestHighLevelClient,可保持其拓展性,開(kāi)發(fā)者在使用EE的同時(shí),仍可使用RestHighLevelClient的功能。

?最新版本 Latest Version: v.1.1.1

Maven

xml復(fù)制代碼<dependency> <groupId>cn.easy-es</groupId> <artifactId>easy-es-boot-starter</artifactId> <version>${Latest Version}</version></dependency>

Gradle

csharp復(fù)制代碼compile group: 'cn.easy-es', name: 'easy-es-boot-starter', version: 'Latest Version'

Easy-Es適用場(chǎng)景

1?? 檢索類服務(wù)

  • 搜索文庫(kù)
  • 電商商品搜索
  • 海量系統(tǒng)日志搜索

2?? 問(wèn)答類服務(wù)

  • 在線智能客服
  • 機(jī)器人

3?? 地圖類服務(wù)

  • 打車APP
  • 外賣APP
  • 社區(qū)團(tuán)購(gòu)配送
  • 社交APP

注解

EsMapperScan

  • 描述:mapper掃描注解,功能與Mybatis Plus@MapperScan一致
  • 使用位置:Spring Boot啟動(dòng)類

kotlin復(fù)制代碼@EsMapperScan("cn.easy-es-mapper")public class Application{ // 省略其它...}

@IndexName

  • 描述:索引名注解,標(biāo)識(shí)實(shí)體類對(duì)應(yīng)的索引 對(duì)應(yīng)Mybatis Plus@TableName注解,在v0.9.40之前此注解為@TableName;
  • 使用位置:實(shí)體類

kotlin復(fù)制代碼@IndexNamepublic class Document { // 省略其它字段}

屬性

類型

是否必須指定

默認(rèn)值

描述

value

String

""

索引名,可以簡(jiǎn)單理解為MySQL表名

shardsNum

int

1

索引分片數(shù)

replicasNum

int

1

索引副本數(shù)

aliasName

String

""

索引別名

keepGlobalPrefix

Boolean

false

是否保持使用全局的tablePrefix,與MP的用法一致

child

boolean

false

是否子文檔

childClass

Class

DefaultChildClass.class

父子分檔-子文檔類

maxResultWindow

int

10000

分頁(yè)返回的最大數(shù)據(jù)量,默認(rèn)值為1萬(wàn)條,超出推薦使用searchAfter或滾動(dòng)查詢等方式

@IndexId

  • 描述:Easy-Es主鍵注解,在v0.9.40之前此注解為@TableId;
  • 使用位置:實(shí)體類中被作為Easy-Es主鍵的字段, 對(duì)應(yīng)MyBatis-Plus@TableId注解。

kotlin復(fù)制代碼public class Document { @IndexId private String id; // 省略其它字段}

屬性

類型

必須指定

默認(rèn)值

描述

value

String

"_id"

主鍵字段名

type

Enum

IdType.NONE

指定主鍵類型

@IndexField

  • 描述:ES字段注解, 對(duì)應(yīng)MP@TableField注解,在v0.9.40之前此注解為@TableField;
  • 使用位置:實(shí)體類中被作為ES索引字段的字段;
  • 使用場(chǎng)景舉例:
  1. 實(shí)體類中的字段并非ES中實(shí)際的字段,比如把實(shí)體類直接當(dāng)DTO用了,加了一些ES中并不存在的無(wú)關(guān)字段,此時(shí)可以標(biāo)記此字段,以便讓EE框架跳過(guò)此字段,對(duì)此字段不處理;
  2. 字段的更新策略,比如在調(diào)用更新接口時(shí),實(shí)體類的字段非Null或者非空字符串時(shí)才更新,此時(shí)可以加字段注解,對(duì)指定字段標(biāo)記更新策略;
  3. 需要對(duì)類型為textkeyword_text字段聚合時(shí),可指定其fieldData=true,否則es會(huì)報(bào)錯(cuò);
  4. 對(duì)指定字段進(jìn)行自定義命名,比如該字段在es中叫wu-la,但在實(shí)體model中叫ula,此時(shí)可以在value中指定value="wu-la";
  5. 在自動(dòng)托管索引模式下,可指定索引分詞器及索引字段類型;
  6. 在自動(dòng)托管索引模式下,可指定索引中日期的format格式。

使用示例:

typescript復(fù)制代碼public class Document { // 此處省略其它字段... // 場(chǎng)景一:標(biāo)記es中不存在的字段 @IndexField(exist = false) private String notExistsField; // 場(chǎng)景二:更新時(shí),此字段非空字符串才會(huì)被更新 @IndexField(strategy = FieldStrategy.NOT_EMPTY) private String creator; // 場(chǎng)景三: 指定fieldData @IndexField(fieldType = FieldType.text, fieldData = true) private String filedData; // 場(chǎng)景四:自定義字段名 @IndexField("wu-la") private String ula; // 場(chǎng)景五:支持日期字段在es索引中的format類型 @IndexField(fieldType = FieldType.DATE, dateFormat = "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis") private String gmtCreate; // 場(chǎng)景六:支持指定字段在es索引中的分詞器類型 @IndexField(fieldType = FieldType.TEXT, analyzer = Analyzer.IK_SMART, searchAnalyzer = Analyzer.IK_MAX_WORD) private String content;}

屬性

類型

必須指定

默認(rèn)值

描述

value

String

""

字段名

exist

boolean

true

字段是否存在

fieldType

Enum

FieldType.NONE

字段在es索引中的類型

fieldData

boolean

false

text類型字段是否支持聚合

analyzer

String

Analyzer.NONE

索引文檔時(shí)用的分詞器

searchAnalyzer

String

Analyzer.NONE

查詢分詞器

strategy

Enum

FieldStrategy.DEFAULT

字段驗(yàn)證策略

dateFormat

String

""

es索引中的日期格式,如yyyy-MM-dd

nestedClass

Class

DefaultNestedClass.class

嵌套類

parentName

String

""

父子文檔-父名稱

childName

String

""

父子文檔-子名稱

joinFieldClass

Class

JoinField.class

父子文檔-父子類型關(guān)系字段類

@Score

  • 描述:得分注解
  • 使用位置:實(shí)體類中被作為ES查詢得分返回的字段
  • 使用場(chǎng)景舉例:比如需要知道本次匹配查詢得分有多少時(shí),可以在實(shí)體類中添加一個(gè)類型為Float/float的字段,并在該字段上添加@Score注解,在后續(xù)查詢中,若es有返回當(dāng)次查詢的得分,則此得分會(huì)自動(dòng)映射至此字段上

屬性

類型

必須指定

默認(rèn)值

描述

decimalPlaces

int

0

得分保留小數(shù)位,默認(rèn)不處理,保持es返回的得分值

@Distance

  • 描述:距離注解
  • 使用位置:實(shí)體類中被作為ES地理位置排序距離值的返回字段
  • 使用場(chǎng)景舉例:比如需要知道按距離由近及遠(yuǎn)查詢后的數(shù)據(jù),實(shí)際距離某一坐標(biāo)有多遠(yuǎn),可以在實(shí)體類中添加一個(gè)類型為Double/double的字段,并在該字段上添加@Distance注解,在后續(xù)查詢中,若es有返回距離,則此距離會(huì)自動(dòng)映射至此字段上

屬性

類型

必須指定

默認(rèn)值

描述

decimalPlaces

int

0

距離保留小數(shù)位,默認(rèn)不處理,保持es返回的距離值

sortBuilderIndex

int

0

排序字段在sortBuilders中的位置, 默認(rèn)為0,若有多個(gè)排序器,則指定為其所在位置

ES版本和Spring Boot版本

xml復(fù)制代碼<properties> <java.version>1.8</java.version> <easy-es.version>1.1.1</easy-es.version> <elasticsearch.version>7.14.0</elasticsearch.version></properties><!-- easy-es --><dependency> <groupId>cn.easy-es</groupId> <artifactId>easy-es-boot-starter</artifactId> <version>${easy-es.version}</version> <exclusions> <exclusion> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> </exclusion> <exclusion> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> </exclusion> </exclusions></dependency><!-- elasticsearch --><dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>${elasticsearch.version}</version></dependency><dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>${elasticsearch.version}</version></dependency>

Spring Boot配置

application.yml 配置文件中添加EasyEs必須的相關(guān)配置:

yaml復(fù)制代碼easy-es: enable: true #默認(rèn)為true,若為false則認(rèn)為不啟用本框架 address : 127.0.0.1:9200 # es的連接地址,必須含端口 若為集群,則可以用逗號(hào)隔開(kāi) 例如:127.0.0.1:9200,127.0.0.2:9200 username: elastic #若無(wú) 則可省略此行配置 password: WG7WVmuNMtM4GwNYkyWH #若無(wú) 則可省略此行配置

BaseEsMapper CRUD接口

Easy-Es封裝了基本的CRUD操作API,通過(guò)繼承BaseEsMapper<T>賦予相關(guān)能力,比如:

csharp復(fù)制代碼public interface DocumentMapper extends BaseEsMapper<Document> {}

相關(guān)操作API

php復(fù)制代碼public interface BaseEsMapper<T> { /** * 是否存在索引 * * @param indexName 索引名稱 * @return 返回是否存在的布爾值 */ Boolean existsIndex(String indexName); /** * 獲取當(dāng)前索引信息 * * @return 當(dāng)前索引信息 */ GetIndexResponse getIndex(); /** * 獲取指定索引信息 * * @param indexName 指定索引名 * @return 指定索引信息 */ GetIndexResponse getIndex(String indexName); /** * 創(chuàng)建索引,根據(jù)當(dāng)前mapper對(duì)應(yīng)實(shí)體類信息及其注解配置生成索引信息 * * @return 是否創(chuàng)建成功 */ Boolean createIndex(); /** * 創(chuàng)建索引,根據(jù)當(dāng)前mapper對(duì)應(yīng)實(shí)體類信息及其注解配置生成索引信息 可指定索引名進(jìn)行創(chuàng)建 適用于定時(shí)任務(wù)按日期創(chuàng)建索引場(chǎng)景 * * @param indexName 指定的索引名,會(huì)覆蓋注解上指定的索引名 * @return 是否創(chuàng)建成功 */ Boolean createIndex(String indexName); /** * 創(chuàng)建索引 * * @param wrapper 條件 * @return 是否成功 */ Boolean createIndex(LambdaEsIndexWrapper<T> wrapper); /** * 更新索引 * * @param wrapper 條件 * @return 是否成功 */ Boolean updateIndex(LambdaEsIndexWrapper<T> wrapper); /** * 刪除指定索引 * * @param indexNames 索引名稱數(shù)組 * @return 是否成功 */ Boolean deleteIndex(String... indexNames); /** * 標(biāo)準(zhǔn)查詢 * * @param wrapper 條件 * @return es標(biāo)準(zhǔn)結(jié)果 */ SearchResponse search(LambdaEsQueryWrapper<T> wrapper); /** * 獲取SearchSourceBuilder,可用于本框架生成基礎(chǔ)查詢條件,不支持的高階語(yǔ)法用戶可通過(guò)SearchSourceBuilder 進(jìn)一步封裝 * * @param wrapper 條件 * @return 查詢參數(shù) */ SearchSourceBuilder getSearchSourceBuilder(LambdaEsQueryWrapper<T> wrapper); /** * es原生查詢 * * @param searchrequest 查詢請(qǐng)求參數(shù) * @param requestOptions 類型 * @return es原生返回結(jié)果 * @throws IOException IO異常 */ SearchResponse search(SearchRequest searchRequest, RequestOptions requestOptions) throws IOException; /** * es原生滾動(dòng)查詢 * * @param searchScrollRequest 查詢請(qǐng)求參數(shù) * @param requestOptions 類型 * @return es原生返回結(jié)果 * @throws IOException IO異常 */ SearchResponse scroll(SearchScrollRequest searchScrollRequest, RequestOptions requestOptions) throws IOException; /** * 獲取通過(guò)本框架生成的查詢參數(shù),可用于檢驗(yàn)本框架生成的查詢參數(shù)是否正確 * * @param wrapper 條件 * @return 查詢JSON格式參數(shù) */ String getSource(LambdaEsQueryWrapper<T> wrapper); /** * 指定返回類型及分頁(yè)參數(shù) * * @param wrapper 條件 * @param pageNum 當(dāng)前頁(yè) * @param pageSize 每頁(yè)條數(shù) * @return 指定的返回類型 */ EsPageInfo<T> pageQuery(LambdaEsQueryWrapper<T> wrapper, Integer pageNum, Integer pageSize); /** * searchAfter類型分頁(yè) * * @param wrapper 條件 * @param searchAfter 當(dāng)前頁(yè) 第一頁(yè)時(shí)為null * @param pageSize 每頁(yè)條數(shù) * @return 指定的返回類型 */ SAPageInfo<T> searchAfterPage(LambdaEsQueryWrapper<T> wrapper, List<Object> searchAfter, Integer pageSize); /** * 獲取總數(shù)(智能推斷:若wrapper中指定了去重字段則去重,若未指定則不去重 推薦使用) * * @param wrapper 條件 * @return 總數(shù) */ Long selectCount(LambdaEsQueryWrapper<T> wrapper); /** * 無(wú)論wrapper中是否指定去重字段,都以用戶傳入的distinct布爾值作為是否去重的條件 * * @param wrapper 條件 * @param distinct 是否去重 * @return 總數(shù) */ Long selectCount(LambdaEsQueryWrapper<T> wrapper, boolean distinct); /** * 插入一條記錄 * * @param entity 插入的數(shù)據(jù)對(duì)象 * @return 成功條數(shù) */ Integer insert(T entity); /** * 插入一條記錄,可指定多索引插入 * * @param entity 插入的數(shù)據(jù)對(duì)象 * @param indexNames 指定插入的索引名數(shù)組 * @return 總成功條數(shù) */ Integer insert(T entity, String... indexNames); /** * 批量插入 * * @param entityList 插入的數(shù)據(jù)對(duì)象列表 * @return 總成功條數(shù) */ Integer insertBatch(Collection<T> entityList); /** * 批量插入 * * @param entityList 插入的數(shù)據(jù)對(duì)象列表 * @param indexNames 指定插入的索引名數(shù)組 * @return 總成功條數(shù) */ Integer insertBatch(Collection<T> entityList, String... indexNames); /** * 根據(jù) ID 刪除 * * @param id 主鍵 * @return 成功條數(shù) */ Integer deleteById(Serializable id); /** * 根據(jù) ID 刪除 * * @param id 主鍵 * @param indexNames 指定刪除的索引名數(shù)組 * @return 總成功條數(shù) */ Integer deleteById(Serializable id, String... indexNames); /** * 刪除(根據(jù)ID 批量刪除) * * @param idList 主鍵列表 * @return 總成功條數(shù) */ Integer deleteBatchIds(Collection<? extends Serializable> idList); /** * 刪除(根據(jù)ID 批量刪除) * * @param idList 主鍵列表 * @param indexNames 指定刪除的索引名數(shù)組 * @return 總成功條數(shù) */ Integer deleteBatchIds(Collection<? extends Serializable> idList, String... indexNames); /** * 根據(jù) entity 條件,刪除記錄 * * @param wrapper 條件 * @return 總成功條數(shù) */ Integer delete(LambdaEsQueryWrapper<T> wrapper); /** * 根據(jù) ID 更新 * * @param entity 更新對(duì)象 * @return 總成功條數(shù) */ Integer updateById(T entity); /** * 根據(jù) ID 更新 * * @param entity 更新對(duì)象 * @param indexNames 指定更新的索引名稱數(shù)組 * @return 總成功條數(shù) */ Integer updateById(T entity, String... indexNames); /** * 根據(jù)ID 批量更新 * * @param entityList 更新對(duì)象列表 * @return 總成功條數(shù) */ Integer updateBatchByIds(Collection<T> entityList); /** * 根據(jù)ID 批量更新 * * @param entityList 更新對(duì)象列表 * @param indexNames 指定更新的索引名稱數(shù)組 * @return 總成功條數(shù) */ Integer updateBatchByIds(Collection<T> entityList, String... indexNames); /** * 根據(jù) whereEntity 條件,更新記錄 * * @param entity 更新對(duì)象 * @param updateWrapper 條件 * @return 成功條數(shù) */ Integer update(T entity, LambdaEsUpdateWrapper<T> updateWrapper); /** * 根據(jù) ID 查詢 * * @param id 主鍵 * @return 指定的返回對(duì)象 */ T selectById(Serializable id); /** * 根據(jù) ID 查詢 * * @param id 主鍵 * @param indexNames 指定查詢的索引名數(shù)組 * @return 指定的返回對(duì)象 */ T selectById(Serializable id, String... indexNames); /** * 查詢(根據(jù)ID 批量查詢) * * @param idList 主鍵列表 * @return 指定的返回對(duì)象列表 */ List<T> selectBatchIds(Collection<? extends Serializable> idList); /** * 查詢(根據(jù)ID 批量查詢) * * @param idList 主鍵列表 * @param indexNames 指定查詢的索引名數(shù)組 * @return 指定的返回對(duì)象列表 */ List<T> selectBatchIds(Collection<? extends Serializable> idList, String... indexNames); /** * 根據(jù) entity 條件,查詢一條記錄 * * @param wrapper 條件 * @return 指定的返回對(duì)象 */ T selectOne(LambdaEsQueryWrapper<T> wrapper); /** * 根據(jù) entity 條件,查詢?nèi)坑涗? * * @param wrapper 條件 * @return 指定的返回對(duì)象列表 */ List<T> selectList(LambdaEsQueryWrapper<T> wrapper); /** * 設(shè)置當(dāng)前Mapper默認(rèn)激活的全局索引名稱 務(wù)必謹(jǐn)慎操作,設(shè)置后全局生效,永駐jvm,除非項(xiàng)目重啟 * * @param indexName 索引名稱 * @return 是否成功 */ Boolean setCurrentActiveIndex(String indexName);}

Tips提示:

CRUD接口用法基本與MyBatis-Plus一致;

用戶需要繼承的MapperBaseEsMapper,而非BaseMapper;

EE沒(méi)有提供Service層,而是把MyBatis-Plus中一些Service層的方法直接下沉到Mapper層了,用戶用起來(lái)會(huì)更方便。

Easy-ES整合實(shí)踐

  • 第一步:確保你的環(huán)境已經(jīng)安裝ElasticSearch,博主這里的演示版本為7.14.0,運(yùn)行ElasticSearch
  • 第二步:創(chuàng)建Maven Project,引入Easy-Es依賴;
  • 第三步:定義文檔類Document,測(cè)試Easy-EsCRUD基本操作。

1?? 運(yùn)行ElasticSearch

搜索引擎ORM框架Easy-Es(搜索引擎 框架)

訪問(wèn):http://localhost:9200/,查看節(jié)點(diǎn)信息。

bash復(fù)制代碼{ "name": "LAPTOP-8G2EVQFP", # 默認(rèn)節(jié)點(diǎn)名稱 "cluster_name": "elasticsearch", "cluster_uuid": "nnFJExSMRj-gy09OeHRk5A", "version": { # ES版本 "number": "7.3.2", "build_flavor": "default", "build_type": "zip", "build_hash": "1c1faf1", "build_date": "2019-09-06T14:40:30.409026Z", "build_snapshot": false, "lucene_version": "8.1.0", "minimum_wire_compatibility_version": "6.8.0", "minimum_index_compatibility_version": "6.0.0-beta1" }, "tagline": "You Know, for Search"}

2?? 創(chuàng)建Spring Boot項(xiàng)目,添加依賴

搜索引擎ORM框架Easy-Es(搜索引擎 框架)

添加POM依賴:

xml復(fù)制代碼<properties> <java.version>1.8</java.version> <easy-es.version>1.1.1</easy-es.version> <elasticsearch.version>7.14.0</elasticsearch.version> <spring-boot-data-elasticsearch.version>3.0.4</spring-boot-data-elasticsearch.version></properties><dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!-- easy-es --> <dependency> <groupId>cn.easy-es</groupId> <artifactId>easy-es-boot-starter</artifactId> <version>${easy-es.version}</version> <exclusions> <exclusion> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> </exclusion> <exclusion> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> </exclusion> </exclusions> </dependency> <!-- elasticsearch --> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>${elasticsearch.version}</version> </dependency> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>${elasticsearch.version}</version> </dependency></dependencies>

文檔類Document

arduino復(fù)制代碼@Datapublic class Document { /** * es中的唯一id */ private String id; /** * 文檔標(biāo)題 */ private String title; /** * 文檔內(nèi)容 */ private String content;}

DocumentMapper

csharp復(fù)制代碼public interface DocumentMapper extends BaseEsMapper<Document> {}

EsDocumentController

typescript復(fù)制代碼@RestController@RequiredArgsConstructor(onConstructor = @__(@Autowired))public class EsDocumentController { private final DocumentMapper documentMapper; @GetMapping("/insert") public Integer insert() { // 初始化-> 新增數(shù)據(jù) Document document = new Document(); document.setId("1"); document.setTitle("austin"); document.setContent("austin-framework-elasticsearch"); return documentMapper.insert(document); } @RequestMapping("/update") public Integer update() { // 更新 Document document = new Document(); document.setId("1"); document.setContent("updated content!"); return documentMapper.updateById(document); } @GetMapping("/search") public List<Document> search() { // 查詢出所有標(biāo)題為austin的文檔列表 LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>(); wrapper.eq(Document::getTitle, "austin"); return documentMapper.selectList(wrapper); } @DeleteMapping("/delete") public Integer delete() { // 根據(jù)ID刪除 LambdaEsQueryWrapper<Document> esQueryWrapper = new LambdaEsQueryWrapper<>(); esQueryWrapper.eq(Document::getId, "1"); return documentMapper.delete(esQueryWrapper); }}

applcation.properties

ini復(fù)制代碼server.port=26686spring.application.name=framework-elasticsearchspring.datasource.url=jdbc:mysql://127.0.0.1:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghaispring.datasource.username=rootspring.datasource.password=rootspring.datasource.driver-class-name=com.mysql.cj.jdbc.Drivereasy-es.address=127.0.0.1:9200easy-es.enable=trueeasy-es.username=elasticeasy-es.password=

3?? 執(zhí)行CRUD操作

訪問(wèn):http://localhost:26686/insert 插入條數(shù)據(jù),接著訪問(wèn):http://localhost:26686/search 根據(jù)title 字段查詢文檔信息。

搜索引擎ORM框架Easy-Es(搜索引擎 框架)

總結(jié)

實(shí)際上,Easy-Es還有很多拓展功能,比如:混合查詢、原生查詢、分頁(yè)查詢、嵌套查詢、Join父子類型、獲取DSL語(yǔ)句,同時(shí)也包含很多高階語(yǔ)法:查詢字段過(guò)濾、排序、聚合查詢、分詞查詢、權(quán)重、高亮查詢、GEO地理位置查詢等等功能。

鏈接:https://juejin.cn/post/7207410405785337916

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
公眾號(hào)
公眾號(hào)
在線咨詢
分享本頁(yè)
返回頂部
河津市| 河北区| 西乌珠穆沁旗| 牙克石市| 呈贡县| 准格尔旗| 仙居县| 民乐县| 丰都县| 肃南| 永平县| 通州区| 棋牌| 克山县| 广水市| 财经| 景泰县| 浮山县| 治多县| 柯坪县| 湾仔区| 化隆| 大荔县| 仙桃市| 木里| 甘德县| 万州区| 靖宇县| 旺苍县| 南平市| 安西县| 东丰县| 合江县| 嫩江县| 独山县| 崇仁县| 德钦县| 隆化县| 浦北县| 靖边县| 内黄县|