日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

ElasticSearch集成SpringData史上最全查询教程

發(fā)布時(shí)間:2025/3/19 javascript 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ElasticSearch集成SpringData史上最全查询教程 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

ElasticSearch集成SpringData史上最全查詢教程

1、簡(jiǎn)單介紹

springboot 使用springdata操作es,ElasticsearchRepository使用QueryBuilder構(gòu)造查詢條件

2、集成es

//maven集成 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency> //實(shí)現(xiàn)ElasticsearchRepository public interface NewsInfoRepository extends ElasticsearchRepository<NewInfoItem,Long> { }

**3、 查詢所有數(shù)據(jù)matchAllQuery **

matchAllQuery 查詢所用:相當(dāng)于sql中的select * from 。當(dāng)然,除了使用QueryBuilderElasticsearchRepository的findAll方法也是查詢所有。public RestResult queryAll() {QueryBuilder queryBuilder = QueryBuilders.matchAllQuery();List<NewInfoItem> resultList = new ArrayList<>();Iterable<NewInfoItem> search = this.newsInfoRepository.search(queryBuilder);search.forEach(resultList::add);return interReturnResult(GlobalErrorCode.SUCCESS, resultList);}

4、matchQuery字段匹配查詢
matchQuery可以簡(jiǎn)單理解為mysql中的like,因?yàn)樵趀lasticsearch中使用matchQuery查詢時(shí),他會(huì)對(duì)查詢的field進(jìn)行分詞。當(dāng)然我們進(jìn)行查詢的這個(gè)field的mapping必須是text類型,傳給match查詢的詞條將被建立索引時(shí)相同的分析器處理

public RestResult matchQuery(String title) {MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("title", title);//多字段進(jìn)行匹配//MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery(title, "title", "name");Iterable<NewInfoItem> search = this.newsInfoRepository.search(matchQueryBuilder);List<NewInfoItem> resultList = new ArrayList<>();search.forEach(resultList::add);return interReturnResult(GlobalErrorCode.SUCCESS, resultList);}

5、query_string查詢
相比其他可用的查詢,query_string查詢支持全部的Apache Lucene查詢語法針對(duì)多字段的query_string查詢

public RestResult queryString(String field) {QueryBuilder queryBuilder = QueryBuilders.queryStringQuery(field);List<NewInfoItem> resultList = new ArrayList<>();Iterable<NewInfoItem> search = this.newsInfoRepository.search(queryBuilder);search.forEach(resultList::add);return interReturnResult(GlobalErrorCode.SUCCESS, resultList);}

6、通配符查詢wildcardQuery
匹配多個(gè)字符,?匹配1個(gè)字符 避免 開始, 會(huì)檢索大量?jī)?nèi)容造成效率緩慢

public RestResult wildcardQuery(String field) {WildcardQueryBuilder wildcardQueryBuilder = QueryBuilders.wildcardQuery("title", "故事*");Iterable<NewInfoItem> search = this.newsInfoRepository.search(wildcardQueryBuilder);List<NewInfoItem> resultList = new ArrayList<>();search.forEach(resultList::add);return interReturnResult(GlobalErrorCode.SUCCESS, resultList);}

7、 詞條查詢termQuery
詞條查詢是Elasticsearch中的一個(gè)簡(jiǎn)單查詢。它僅匹配在給定字段中含有該詞條的文檔,而且是確切的、未經(jīng)分析的詞條相當(dāng)于sql語句中的“=”,使用這個(gè)搜索一般是對(duì)索引中keyword的mapping進(jìn)行等值搜索。term query 屬于過濾器查詢,可以處理數(shù)字(numbers)、布爾值(Booleans)、日期(dates)以及文本(text)。

public RestResult termQuery(String title) {TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("title", title);Iterable<NewInfoItem> search = this.newsInfoRepository.search(termQueryBuilder);List<NewInfoItem> resultList = new ArrayList<>();search.forEach(resultList::add);return interReturnResult(GlobalErrorCode.SUCCESS, resultList);}

8、查詢ID(標(biāo)識(shí)符查詢)idsQuery

public RestResult queryIdsQ(String id) {//可以添加多個(gè)idIdsQueryBuilder idsQueryBuilder = QueryBuilders.idsQuery().addIds(id);Iterable<NewInfoItem> search = this.newsInfoRepository.search(idsQueryBuilder);List<NewInfoItem> resultList = new ArrayList<>();search.forEach(resultList::add);return interReturnResult(GlobalErrorCode.SUCCESS, resultList);}

9、相似度查詢fuzzyQuery
fuzzy查詢是模糊查詢中的第三種類型,它基于編輯距離算法來匹配文檔

public RestResult fuzzyQuery(String str) {FuzzyQueryBuilder fuzzyQueryBuilder = QueryBuilders.fuzzyQuery("title", str);Iterable<NewInfoItem> search = this.newsInfoRepository.search(fuzzyQueryBuilder);List<NewInfoItem> resultList = new ArrayList<>();search.forEach(resultList::add);return interReturnResult(GlobalErrorCode.SUCCESS, resultList);}

10、范圍查詢r(jià)angeQuery
范圍查詢使我們能夠找到在某一字段值在某個(gè)范圍里的文檔,字段可以是數(shù)值型,也可以是基于字符串的

public RestResult rangeQuery(String str) {RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age").from(10).to(20);//大于:select * from wtyy where age >1QueryBuilder queryBuilder1 = QueryBuilders.rangeQuery("age").gt(str);//大于等于:select * from wtyy where age >=1QueryBuilder queryBuilder2 = QueryBuilders.rangeQuery("age").gte(str);//小于:select * from wtyy where age <4QueryBuilder queryBuilder3 = QueryBuilders.rangeQuery("age").lt(str);//小于等于QueryBuilder queryBuilder4 = QueryBuilders.rangeQuery("age").lte(str);Iterable<NewInfoItem> search = this.newsInfoRepository.search(rangeQueryBuilder);List<NewInfoItem> resultList = new ArrayList<>();search.forEach(resultList::add);return interReturnResult(GlobalErrorCode.SUCCESS, resultList);}

11、 組合查詢(復(fù)雜查詢)

must(QueryBuilders) : ANDmustNot(QueryBuilders): NOTshould(QueryBuilders):ORpublic RestResult multiQuery(String title, String stockCode) {BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("title", title)).must(QueryBuilders.termQuery("stockCode", stockCode));Iterable<NewInfoItem> search1 = this.newsInfoRepository.search(boolQueryBuilder);List<NewInfoItem> resultList = new ArrayList<>();search1.forEach(resultList::add);return interReturnResult(GlobalErrorCode.SUCCESS, resultList);}

12、復(fù)合查詢+排序

public RestResult sortQuery(String title, String stockCode) {NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();nativeSearchQueryBuilder.withQuery(QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("title", title)).must(QueryBuilders.termQuery("stockCode", stockCode))).withSort(SortBuilders.fieldSort("id").order(SortOrder.DESC));Page<NewInfoItem> search = this.newsInfoRepository.search(nativeSearchQueryBuilder.build());List<NewInfoItem> resultList = new ArrayList<>();search.forEach(resultList::add);return interReturnResult(GlobalErrorCode.SUCCESS, resultList);}

13、復(fù)合查詢+排序+分頁

public RestResult pageQuery(String title, String stockCode, Integer pageNum, Integer pageSize) {NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();nativeSearchQueryBuilder.withQuery(QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("title", title)).must(QueryBuilders.termQuery("stockCode", stockCode))).withSort(SortBuilders.fieldSort("id").order(SortOrder.DESC)).withPageable(PageRequest.of(pageNum, pageSize));Page<NewInfoItem> search = this.newsInfoRepository.search(nativeSearchQueryBuilder.build());List<NewInfoItem> resultList = new ArrayList<>();search.forEach(resultList::add);return interReturnResult(GlobalErrorCode.SUCCESS, resultList);}

14、復(fù)合查詢+排序+分頁 高亮顯示

public RestResult pageQuery(String title, Integer pageNum, Integer pageSize) {NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();String preTag = "<font color='#dd4b39'>";//google的色值String postTag = "</font>";nativeSearchQueryBuilder.withQuery(QueryBuilders.boolQuery().must(QueryBuilders.termQuery("title", title))).withSort(SortBuilders.fieldSort("id").order(SortOrder.DESC)).withHighlightFields(new HighlightBuilder.Field("stockCode").preTags(preTag).postTags(postTag)).withPageable(PageRequest.of(pageNum, pageSize));Page<NewInfoItem> search = this.newsInfoRepository.search(nativeSearchQueryBuilder.build());List<NewInfoItem> resultList = new ArrayList<>();search.forEach(resultList::add);return interReturnResult(GlobalErrorCode.SUCCESS, resultList);} ?

繼續(xù)支持Remi醬吧!

搬運(yùn)不容易,文章來源:https://www.tuicool.com/articles/iUZJnaq

總結(jié)

以上是生活随笔為你收集整理的ElasticSearch集成SpringData史上最全查询教程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。