javascript
ElasticSearch集成SpringData史上最全查询教程
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)然,除了使用QueryBuilder,ElasticsearchRepository的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í)相同的分析器處理
5、query_string查詢
相比其他可用的查詢,query_string查詢支持全部的Apache Lucene查詢語法針對(duì)多字段的query_string查詢
6、通配符查詢wildcardQuery
匹配多個(gè)字符,?匹配1個(gè)字符 避免 開始, 會(huì)檢索大量?jī)?nèi)容造成效率緩慢
7、 詞條查詢termQuery
詞條查詢是Elasticsearch中的一個(gè)簡(jiǎn)單查詢。它僅匹配在給定字段中含有該詞條的文檔,而且是確切的、未經(jīng)分析的詞條相當(dāng)于sql語句中的“=”,使用這個(gè)搜索一般是對(duì)索引中keyword的mapping進(jìn)行等值搜索。term query 屬于過濾器查詢,可以處理數(shù)字(numbers)、布爾值(Booleans)、日期(dates)以及文本(text)。
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查詢是模糊查詢中的第三種類型,它基于編輯距離算法來匹配文檔
10、范圍查詢r(jià)angeQuery
范圍查詢使我們能夠找到在某一字段值在某個(gè)范圍里的文檔,字段可以是數(shù)值型,也可以是基于字符串的
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【手撸RPC框架】SpringBoot+
- 下一篇: Spring Security 玩出花!