springtboot 操作es
生活随笔
收集整理的這篇文章主要介紹了
springtboot 操作es
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 三大塊
- rest操作api
- elasticRestTemplate操作es
- mapper操作es
本文章看了下
使用的是6.8的包,但是我本地安裝的是7.13.4.居然也能操作,如果是7.x的包的話,就好了,暫時不影響使用。
三大塊
rest操作api
package com.tjx.elasticsearch;import org.apache.http.HttpHost; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestClientBuilder; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.MatchQueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.TermQueryBuilder; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHits; import org.elasticsearch.search.aggregations.Aggregation; import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.Aggregations; import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest;import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map;@SpringBootTest public class TestRest {@Testvoid testRestInsert() throws IOException {//1.連接rest接口HttpHost http = new HttpHost("127.0.0.1", 9200, "http");RestClientBuilder restClientBuilder = RestClient.builder(http);//rest構建器RestHighLevelClient restHighLevelClient = new RestHighLevelClient(restClientBuilder);//獲取高級客戶端對象//2.封裝請求對象//BulkRequest bulkRequest = new BulkRequest(); //用于批量操作IndexRequest indexRequest = new IndexRequest("test_rest", "_doc", "1");HashMap skuMap = new HashMap();skuMap.put("name","法拉利 LaFerrari Aperta");skuMap.put("brandName","法拉利");skuMap.put("categoryName","超級跑車");HashMap spec = new HashMap();spec.put("動力","963匹");spec.put("扭矩","880N/m");spec.put("車長","4975mm");spec.put("重量","1250kg");skuMap.put("spec",spec);skuMap.put("createTime","2017-08-10");skuMap.put("price",43000000);skuMap.put("saleNum",209);skuMap.put("commentNum",6128746);indexRequest.source(skuMap);//bulkRequest.add(indexRequest); //用于批量操作//3.獲取響應結果IndexResponse indexResponse = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);//BulkResponse bulkResponse = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT); //用于批量操作int status = indexResponse.status().getStatus();System.out.println(status);restHighLevelClient.close();}@Testvoid testRestQueryMatch() throws IOException {//1.連接rest接口HttpHost http = new HttpHost("127.0.0.1", 9200, "http");RestClientBuilder restClientBuilder = RestClient.builder(http);//rest構建器RestHighLevelClient restHighLevelClient = new RestHighLevelClient(restClientBuilder);//獲取高級客戶端對象//2.封裝查詢請求SearchRequest searchRequest = new SearchRequest("test_rest");searchRequest.types("_doc"); //設置查詢的類型//創建查詢條件SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); //查詢源構建器MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("categoryName", "超級跑車");searchSourceBuilder.query(matchQueryBuilder);searchRequest.source(searchSourceBuilder);//3.獲取查詢結果SearchResponse response = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);SearchHits searchHits = response.getHits();long totalHits = searchHits.getTotalHits();System.out.println("記錄數:"+totalHits);SearchHit[] hits = searchHits.getHits();for (SearchHit hit : hits) {System.out.println(hit.getSourceAsString());}restHighLevelClient.close();}@Testvoid testRestQueryBool() throws IOException {//1.連接rest接口HttpHost http = new HttpHost("127.0.0.1", 9200, "http");RestClientBuilder restClientBuilder = RestClient.builder(http);//rest構建器RestHighLevelClient restHighLevelClient = new RestHighLevelClient(restClientBuilder);//獲取高級客戶端對象//2.封裝查詢請求SearchRequest searchRequest = new SearchRequest("test_rest");searchRequest.types("_doc"); //設置查詢的類型//創建查詢條件SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); //查詢源構建器BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); //布爾查詢構建器MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("name", "LaFerrari");boolQueryBuilder.must(matchQueryBuilder);TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("brandName", "法拉利");boolQueryBuilder.must(termQueryBuilder);searchSourceBuilder.query(boolQueryBuilder);searchRequest.source(searchSourceBuilder);//3.獲取查詢結果SearchResponse response = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);SearchHits searchHits = response.getHits();long totalHits = searchHits.getTotalHits();System.out.println("記錄數:" + totalHits);SearchHit[] hits = searchHits.getHits();for (SearchHit hit : hits) {System.out.println(hit.getSourceAsString());}restHighLevelClient.close();}@Testvoid testRestQueryfilter() throws IOException {//1.連接rest接口HttpHost http = new HttpHost("127.0.0.1", 9200, "http");RestClientBuilder restClientBuilder = RestClient.builder(http);//rest構建器RestHighLevelClient restHighLevelClient = new RestHighLevelClient(restClientBuilder);//獲取高級客戶端對象//2.封裝查詢請求SearchRequest searchRequest = new SearchRequest("test_rest");searchRequest.types("_doc"); //設置查詢的類型//創建查詢條件SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); //查詢源構建器BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); //布爾查詢構建器TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("brandName", "法拉利");boolQueryBuilder.filter(termQueryBuilder);searchSourceBuilder.query(boolQueryBuilder);searchRequest.source(searchSourceBuilder);//3.獲取查詢結果SearchResponse response = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);SearchHits searchHits = response.getHits();long totalHits = searchHits.getTotalHits();System.out.println("記錄數:" + totalHits);SearchHit[] hits = searchHits.getHits();for (SearchHit hit : hits) {System.out.println(hit.getSourceAsString());}restHighLevelClient.close();}@Testvoid testRestQueryAggregation() throws IOException {//連接rest接口HttpHost http = new HttpHost("127.0.0.1", 9200, "http");RestClientBuilder restClientBuilder = RestClient.builder(http);//rest構建器RestHighLevelClient restHighLevelClient = new RestHighLevelClient(restClientBuilder);//獲取高級客戶端對象//封裝查詢請求SearchRequest searchRequest = new SearchRequest("test_rest");searchRequest.types("_doc"); //設置查詢的類型//創建查詢條件SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); //查詢源構建器TermsAggregationBuilder aggregation = AggregationBuilders.terms("類型名稱").field("categoryName");searchSourceBuilder.aggregation(aggregation);searchSourceBuilder.size(0);searchRequest.source(searchSourceBuilder);//獲取查詢結果SearchResponse response = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);Aggregations aggregations = response.getAggregations();Map<String, Aggregation> map = aggregations.getAsMap();Terms terms = (Terms) map.get("類型名稱");List<? extends Terms.Bucket> buckets = terms.getBuckets();for (Terms.Bucket bucket : buckets) {System.out.println(bucket.getKeyAsString()+":"+bucket.getDocCount());}restHighLevelClient.close();//高亮設置 // HighlightBuilder highlightBuilder = new HighlightBuilder(); // highlightBuilder.field("name").preTags("<font style='color:red'>").postTags("</font>"); // searchSourceBuilder.highlighter(highlightBuilder);} }elasticRestTemplate操作es
package com.tjx.elasticsearch;import com.alibaba.fastjson.JSONObject; import com.tjx.elasticsearch.bean.ChildItem; import com.tjx.elasticsearch.bean.Item; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.aggregations.Aggregation; import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.Aggregations; import org.elasticsearch.search.aggregations.bucket.range.Range; import org.elasticsearch.search.aggregations.bucket.range.RangeAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.aggregations.metrics.InternalNumericMetricsAggregation; import org.elasticsearch.search.aggregations.metrics.avg.Avg; import org.elasticsearch.search.aggregations.metrics.avg.AvgAggregationBuilder; import org.elasticsearch.search.aggregations.metrics.cardinality.CardinalityAggregationBuilder; import org.elasticsearch.search.aggregations.metrics.stats.extended.ExtendedStatsAggregationBuilder; import org.elasticsearch.search.aggregations.metrics.tophits.TopHits; import org.elasticsearch.search.aggregations.metrics.tophits.TopHitsAggregationBuilder; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.domain.PageRequest; import org.springframework.data.elasticsearch.core.ElasticsearchTemplate; import org.springframework.data.elasticsearch.core.ResultsExtractor; import org.springframework.data.elasticsearch.core.ScrolledPage; import org.springframework.data.elasticsearch.core.query.IndexQuery; import org.springframework.data.elasticsearch.core.query.IndexQueryBuilder; import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; import org.springframework.data.elasticsearch.core.query.SearchQuery;import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List;import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery;@SpringBootTest public class TestElasticsearchTemplate {@Autowiredprivate ElasticsearchTemplate elasticsearchTemplate;@Testvoid createIndex(){//創建索引及映射elasticsearchTemplate.createIndex(Item.class);//創建映射 // elasticsearchTemplate.putMapping(Item.class);}@Testvoid putMegacorp() {List<String> list=new ArrayList<>();list.add("sports");list.add("music");ChildItem childItem=new ChildItem(100,"taibai");Item item1=new Item(6L,"John","男",25,list,childItem);Item item2=new Item(7L,"Jane","Smith",32, Arrays.asList("music"),childItem);Item item3=new Item(8L,"Douglas","Fir",35,Arrays.asList("forestry"),childItem);IndexQuery indexQuery1 = new IndexQueryBuilder().withId(String.valueOf(item1.getLd())).withObject(item1).build();IndexQuery indexQuery2 = new IndexQueryBuilder().withId(String.valueOf(item2.getLd())).withObject(item2).build();IndexQuery indexQuery3 = new IndexQueryBuilder().withId(String.valueOf(item3.getLd())).withObject(item3).build();elasticsearchTemplate.bulkIndex(Arrays.asList(indexQuery1,indexQuery2,indexQuery3));}@Testvoid testPage() {SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).withIndices("test_springdata_es").withPageable(PageRequest.of(0, 10)).build();ScrolledPage<Item> scroll = elasticsearchTemplate.startScroll(1000, searchQuery, Item.class);String scrollId = scroll.getScrollId();List<Item> content = scroll.getContent();content.forEach(item->{System.out.println(item);});System.out.println(scrollId);elasticsearchTemplate.clearScroll(scrollId);}//平均最大最小求和聚合@Testvoid testAggregation(){AvgAggregationBuilder avgAggregationBuilder = AggregationBuilders.avg("taibai").field("price"); // MaxAggregationBuilder maxAggregationBuilder = AggregationBuilders.max("taibai").field("price");SearchQuery searchQuery = new NativeSearchQueryBuilder().addAggregation(avgAggregationBuilder).withIndices("goods").withTypes("_doc").build();Aggregations aggregations = elasticsearchTemplate.query(searchQuery, new ResultsExtractor<Aggregations>() {@Overridepublic Aggregations extract(SearchResponse response) {return response.getAggregations();}});Aggregation aggregation1 = aggregations.asList().get(0);InternalNumericMetricsAggregation.SingleValue singleValue= (InternalNumericMetricsAggregation.SingleValue) aggregation1;double value = singleValue.value();System.out.println(value);}//去重@Testvoid testAggregationCardinality(){CardinalityAggregationBuilder aggregationBuilder = AggregationBuilders.cardinality("taibai").field("price");SearchQuery searchQuery = new NativeSearchQueryBuilder().addAggregation(aggregationBuilder).withIndices("goods").withTypes("_doc").build();Aggregations aggregations = elasticsearchTemplate.query(searchQuery, new ResultsExtractor<Aggregations>() {@Overridepublic Aggregations extract(SearchResponse response) {return response.getAggregations();}});Aggregation aggregation1 = aggregations.getAsMap().get("taibai");InternalNumericMetricsAggregation.SingleValue singleValue= (InternalNumericMetricsAggregation.SingleValue) aggregation1;double value = singleValue.value();System.out.println(value);}//擴展查詢@Testvoid testAggregationextended_stats(){ExtendedStatsAggregationBuilder extendedStatsAggregationBuilder = AggregationBuilders.extendedStats("taibai").field("price");SearchQuery searchQuery = new NativeSearchQueryBuilder().addAggregation(extendedStatsAggregationBuilder).withIndices("goods").withTypes("_doc").build();Aggregations aggregations = elasticsearchTemplate.query(searchQuery, new ResultsExtractor<Aggregations>() {@Overridepublic Aggregations extract(SearchResponse response) {return response.getAggregations();}});Aggregation aggregation1 = aggregations.getAsMap().get("taibai");InternalNumericMetricsAggregation.MultiValue multiValue= (InternalNumericMetricsAggregation.MultiValue ) aggregation1;System.out.println(multiValue.value("max"));}//terms詞聚合@Testvoid testAggregationTerms(){TermsAggregationBuilder termsAggregationBuilder = AggregationBuilders.terms("taibai").field("price");SearchQuery searchQuery = new NativeSearchQueryBuilder().addAggregation(termsAggregationBuilder).withIndices("goods").withTypes("_doc").build();Aggregations aggregations = elasticsearchTemplate.query(searchQuery, new ResultsExtractor<Aggregations>() {@Overridepublic Aggregations extract(SearchResponse response) {return response.getAggregations();}});Aggregation aggregation1 = aggregations.getAsMap().get("taibai");Terms term1 = (Terms)aggregation1;List<? extends Terms.Bucket> buckets = term1.getBuckets();for (Terms.Bucket bucket : buckets) {System.out.println(bucket.getKey()+"||"+bucket.getDocCount());}}//top_hits最高匹配權值聚合@Testvoid testAggregationtop_hits(){TermsAggregationBuilder termsAggregationBuilder = AggregationBuilders.terms("taibai").field("price");TopHitsAggregationBuilder topHitsAggregationBuilder = AggregationBuilders.topHits("top").size(3);termsAggregationBuilder.subAggregation(topHitsAggregationBuilder);SearchQuery searchQuery = new NativeSearchQueryBuilder().addAggregation(termsAggregationBuilder).withIndices("goods").withTypes("_doc").build();Aggregations aggregations = elasticsearchTemplate.query(searchQuery, new ResultsExtractor<Aggregations>() {@Overridepublic Aggregations extract(SearchResponse response) {return response.getAggregations();}});Aggregation aggregation1 = aggregations.getAsMap().get("taibai");Terms term1 = (Terms)aggregation1;List<? extends Terms.Bucket> buckets = term1.getBuckets();for (Terms.Bucket bucket : buckets) {System.out.println(bucket.getKey()+"||"+bucket.getDocCount());Aggregation aggregation = bucket.getAggregations().getAsMap().get("top");TopHits topHits= (TopHits) aggregation;Iterator<SearchHit> iterator = topHits.getHits().iterator();while (iterator.hasNext()){SearchHit next = iterator.next();Object object=JSONObject.parse(next.getSourceAsString());System.out.println(object);}}}@Testvoid testAggregationRange(){RangeAggregationBuilder rangeAggregationBuilder = AggregationBuilders.range("taibai").field("age").addRange(20,30).addRange(30,40).addRange(40,50);SearchQuery searchQuery = new NativeSearchQueryBuilder().addAggregation(rangeAggregationBuilder).withIndices("bank").withTypes("_doc").build();Aggregations aggregations = elasticsearchTemplate.query(searchQuery, new ResultsExtractor<Aggregations>() {@Overridepublic Aggregations extract(SearchResponse response) {return response.getAggregations();}});Aggregation aggregation1 = aggregations.getAsMap().get("taibai");Range range = (Range)aggregation1;List<? extends Range.Bucket> buckets = range.getBuckets();for (Range.Bucket bucket : buckets) {System.out.println(bucket.getKeyAsString()+"--"+bucket.getDocCount());}}@Testvoid testAggregationLast(){RangeAggregationBuilder rangeAggregationBuilder = AggregationBuilders.range("age_range").field("age").addRange(20,30).addRange(30,40).addRange(40,50);TermsAggregationBuilder termsAggregationBuilder = AggregationBuilders.terms("gender_group").field("gender.keyword");AvgAggregationBuilder aggregationBuilder = AggregationBuilders.avg("balance_avg").field("balance");termsAggregationBuilder.subAggregation(aggregationBuilder);rangeAggregationBuilder.subAggregation(termsAggregationBuilder);SearchQuery searchQuery = new NativeSearchQueryBuilder().addAggregation(rangeAggregationBuilder).withIndices("bank").withTypes("_doc").build();Aggregations aggregations = elasticsearchTemplate.query(searchQuery, new ResultsExtractor<Aggregations>() {@Overridepublic Aggregations extract(SearchResponse response) {return response.getAggregations();}});Aggregation aggregation1 = aggregations.getAsMap().get("age_range");Range range = (Range)aggregation1;List<? extends Range.Bucket> buckets = range.getBuckets();for (Range.Bucket bucket : buckets) {System.out.println(bucket.getKeyAsString()+"--"+bucket.getDocCount());Aggregation gender_group = bucket.getAggregations().getAsMap().get("gender_group");Terms terms=(Terms)gender_group;List<? extends Terms.Bucket> buckets1 = terms.getBuckets();for (Terms.Bucket bucket1 : buckets1) {System.out.println(bucket1.getKeyAsString()+"--"+bucket1.getDocCount());Aggregation balance_avg = bucket1.getAggregations().getAsMap().get("balance_avg");Avg avg= (Avg) balance_avg;System.out.println(avg.getValue());}}}}mapper操作es
@Configuration public class TransportClientConfig extends ElasticsearchConfigurationSupport {@Beanpublic Client elasticsearchClient() throws UnknownHostException { // Settings settings = Settings.builder().put("cluster.name", "taibai").build();Settings settings = Settings.builder().build();TransportClient client = new PreBuiltTransportClient(settings);client.addTransportAddress(new TransportAddress(InetAddress.getByName("127.0.0.1"), 9300));return client;}@Bean(name = {"elasticsearchOperations", "elasticsearchTemplate"})public ElasticsearchTemplate elasticsearchTemplate() throws UnknownHostException {return new ElasticsearchTemplate(elasticsearchClient(), entityMapper());}@Bean@Overridepublic EntityMapper entityMapper() {ElasticsearchEntityMapper entityMapper = new ElasticsearchEntityMapper(elasticsearchMappingContext(),new DefaultConversionService());entityMapper.setConversions(elasticsearchCustomConversions());return entityMapper;} }GoodMapper
import com.tjx.elasticsearch.bean.Goods; import org.springframework.data.domain.Pageable; import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;import java.util.List;public interface GoodsMapper extends ElasticsearchRepository<Goods, String> {List<Goods> findByName(String name);List<Goods> findByName(String name, Pageable pageable); }TestMapper
package com.tjx.elasticsearch;import com.tjx.elasticsearch.bean.Goods; import com.tjx.elasticsearch.mapper.GoodsMapper; import org.elasticsearch.index.query.*; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort;import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.List;@SpringBootTest class TestMapper {@AutowiredGoodsMapper goodsMapper;//添加一條數據 and 修改一條數據@Testvoid insertGoods() {SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String str = simpleDateFormat.format(new Date());Goods goods=new Goods(1025332689,"","OPPO R17新年版 2500萬美顏拍照 6.4英寸水滴屏 光感屏幕指紋 6G+128G 全網通 移動聯通電信4G 雙卡雙待手機",37400,20,100,"https://m.360buyimg.com/mobilecms/s720x720_jfs/t1/10441/9/5525/162976/5c177debEaf815b43/3aa7d4dc182cc4d9.jpg!q70.jpg.webp","https://m.360buyimg.com/mobilecms/s720x720_jfs/t1/10441/9/5525/162976/5c177debEaf815b43/3aa7d4dc182cc4d9.jpg!q70.jpg.webp",10,str,str,"10000243333000",558,"手機","OPPO","{'顏色': '王者榮耀定制版', '版本': 'R17'}",1,1,1,4L);System.out.println(goodsMapper.save(goods));}//批量插入和批量修改@Testvoid insertGoodsList() {List<Goods> list=new ArrayList<>();SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String str = simpleDateFormat.format(new Date());Goods goods=new Goods(1001332689,"","OPPO R17新年版 2500萬美顏拍照 6.4英寸水滴屏 光感屏幕指紋 6G+128G 全網通 移動聯通電信4G 雙卡雙待手機",37400,10000,100,"https://m.360buyimg.com/mobilecms/s720x720_jfs/t1/10441/9/5525/162976/5c177debEaf815b43/3aa7d4dc182cc4d9.jpg!q70.jpg.webp","https://m.360buyimg.com/mobilecms/s720x720_jfs/t1/10441/9/5525/162976/5c177debEaf815b43/3aa7d4dc182cc4d9.jpg!q70.jpg.webp",10,str,str,"10000243333000",558,"手機","OPPO","{'顏色': '王者榮耀定制版', '版本': 'R17'}",1,1,1);Goods goods2=new Goods(1001368912,"","OPPO R17新年版 2500萬美顏拍照 6.4英寸水滴屏 光感屏幕指紋 6G+128G 全網通 移動聯通電信4G 雙卡雙待手機",37400,10000,100,"https://m.360buyimg.com/mobilecms/s720x720_jfs/t1/10441/9/5525/162976/5c177debEaf815b43/3aa7d4dc182cc4d9.jpg!q70.jpg.webp","https://m.360buyimg.com/mobilecms/s720x720_jfs/t1/10441/9/5525/162976/5c177debEaf815b43/3aa7d4dc182cc4d9.jpg!q70.jpg.webp",10,str,str,"10000243333000",558,"手機","OPPO","{'顏色': '王者榮耀定制版', '版本': 'R17'}",1,1,1);Goods goods3=new Goods(100001402792L,"","OPPO R17新年版 2500萬美顏拍照 6.4英寸水滴屏 光感屏幕指紋 6G+128G 全網通 移動聯通電信4G 雙卡雙待手機",37400,10000,100,"https://m.360buyimg.com/mobilecms/s720x720_jfs/t1/10441/9/5525/162976/5c177debEaf815b43/3aa7d4dc182cc4d9.jpg!q70.jpg.webp","https://m.360buyimg.com/mobilecms/s720x720_jfs/t1/10441/9/5525/162976/5c177debEaf815b43/3aa7d4dc182cc4d9.jpg!q70.jpg.webp",10,str,str,"10000243333000",558,"手機","OPPO","{'顏色': '王者榮耀定制版', '版本': 'R17'}",1,1,1);list.add(goods);list.add(goods2);list.add(goods3);goodsMapper.saveAll(list);}//刪除數據@Testvoid updateGoods() {//刪除一條 // goodsMapper.deleteById("1001332689");//刪除所有或者傳入集合 刪除集合中的數據goodsMapper.deleteAll();}//查詢數據@Testvoid uqueryGoods() {//查詢一條數據 // Optional<Goods> goods = goodsMapper.findById("100001402792"); // System.out.println(goods.get());// System.out.println("====================================");//查詢所有數據 // Iterable<Goods> goodsAll = goodsMapper.findAll(); // Iterator<Goods> goodsIterator = goodsAll.iterator(); // int count=0; // while (goodsIterator.hasNext()){ // Goods goods1 = goodsIterator.next(); // System.out.println(goods1); // count++; // } // System.out.println(count);// System.out.println("====================================");//分頁排序// page頁碼 并不是跳過多少數據//返回數Pageable pageable=PageRequest.of(1,100,Sort.by(Sort.Direction.ASC, "num"));Page<Goods> goodsPage = goodsMapper.findAll(pageable);Iterator<Goods> goodsIterator = goodsPage.iterator();int count=0;while (goodsIterator.hasNext()){Goods goods1 = goodsIterator.next();System.out.println(goods1);count++;}System.out.println(count);}@Testvoid exists(){//判斷文檔是否存在boolean exists = goodsMapper.existsById("文檔ID");}//term查詢@Testvoid termGoods(){//主要用于精確匹配哪些值,比如數字,日期,布爾值或 not_analyzed 的字符串(未經分析的文本數據類型)// 搜索前不會再對搜索詞進行分詞,所以我們的搜索詞必須是文檔分詞集合中的一個。TermQueryBuilder termQueryBuilder=new TermQueryBuilder("name","2018");Pageable pageable=PageRequest.of(0,100);Iterable<Goods> goods = goodsMapper.search(termQueryBuilder,pageable);Iterator<Goods> goodsIterator = goods.iterator();int count=0;while (goodsIterator.hasNext()){Goods goods1 = goodsIterator.next();System.out.println(goods1);count++;}System.out.println(count);}//terms查詢@Testvoid termsGoods(){//terms 跟 term 有點類似,但 terms 允許指定多個匹配條件。// 如果某個字段指定了多個值,那么文檔需要一起去做匹配 或者關系TermsQueryBuilder termsQueryBuilder=new TermsQueryBuilder("name","2018","最新","女鞋");Pageable pageable=PageRequest.of(0,100);Iterable<Goods> goods = goodsMapper.search(termsQueryBuilder,pageable);Iterator<Goods> goodsIterator = goods.iterator();int count=0;while (goodsIterator.hasNext()){Goods goods1 = goodsIterator.next();System.out.println(goods1);count++;}System.out.println(count);}//range查詢@Testvoid rangelGoods(){//范圍查詢RangeQueryBuilder rangeQueryBuilder=new RangeQueryBuilder("price");rangeQueryBuilder.gt(20);rangeQueryBuilder.lt(10000);Pageable pageable=PageRequest.of(0,100);Iterable<Goods> goods = goodsMapper.search(rangeQueryBuilder,pageable);Iterator<Goods> goodsIterator = goods.iterator();int count=0;while (goodsIterator.hasNext()){Goods goods1 = goodsIterator.next();System.out.println(goods1);count++;}System.out.println(count);}//exists查詢@Testvoid existsGoods(){//exists 查詢可以用于查找文檔中是否包含指定字段或沒有某個字段,類似于SQL語句中的 IS_NULL 條件//包含這個字段就返回返回這條數據ExistsQueryBuilder existsQueryBuilder=new ExistsQueryBuilder("category_name");Pageable pageable=PageRequest.of(0,100);Iterable<Goods> goods = goodsMapper.search(existsQueryBuilder,pageable);Iterator<Goods> goodsIterator = goods.iterator();int count=0;while (goodsIterator.hasNext()){Goods goods1 = goodsIterator.next();System.out.println(goods1);count++;}System.out.println(count);}//match查詢@Testvoid matchGoods(){//match查詢會先對搜索詞進行分詞,分詞完畢后再逐個對分詞結果進行匹配,因此相比于term的精確搜索,match是分詞匹配搜索//如果用 match 下指定了一個確切值,在遇到數字,日期,布爾值或者 not_analyzed 的字符串時,它將為你搜索你給定的值MatchQueryBuilder matchQueryBuilder=new MatchQueryBuilder("name","2018年最新女鞋");Pageable pageable=PageRequest.of(0,100);Iterable<Goods> goods = goodsMapper.search(matchQueryBuilder,pageable);Iterator<Goods> goodsIterator = goods.iterator();int count=0;while (goodsIterator.hasNext()){Goods goods1 = goodsIterator.next();System.out.println(goods1);count++;}System.out.println(count);}//bool查詢 和 filter 查詢@Testvoid boolGoods(){ // bool 查詢可以用來合并多個條件查詢結果的布爾邏輯,它包含一下操作符: // must :: 多個查詢條件的完全匹配,相當于 and 。 // must_not :: 多個查詢條件的相反匹配,相當于 not 。 // should :: 至少有一個查詢條件匹配, 相當于 or 。BoolQueryBuilder boolQueryBuilder=new BoolQueryBuilder();//搜索2018年價格在1000-2000之內的女鞋 顏色不能是白色的 只能是黑色或者是紅色RangeQueryBuilder rangeQueryBuilder=new RangeQueryBuilder("price");rangeQueryBuilder.lte(2000);rangeQueryBuilder.gte(1000);MatchQueryBuilder matchQueryBuilder=new MatchQueryBuilder("name","2018女鞋");MatchQueryBuilder matchQueryBuilder2=new MatchQueryBuilder("spec","藍色");boolQueryBuilder.must(rangeQueryBuilder);boolQueryBuilder.must(matchQueryBuilder);boolQueryBuilder.mustNot(matchQueryBuilder2);MatchQueryBuilder matchQueryBuilder3=new MatchQueryBuilder("spec","黑色 紅色");boolQueryBuilder.must(matchQueryBuilder3);TermQueryBuilder termsQueryBuilder=new TermQueryBuilder("num",10000);boolQueryBuilder.filter(termsQueryBuilder);// Pageable pageable=PageRequest.of(0,100);Iterable<Goods> goods = goodsMapper.search(boolQueryBuilder);Iterator<Goods> goodsIterator = goods.iterator();int count=0;while (goodsIterator.hasNext()){Goods goods1 = goodsIterator.next();System.out.println(goods1);count++;}System.out.println(count);}//自定義方法@Testvoid testCustom(){ // List<Goods> goodsList = goodsMapper.findByName("2018新款"); // for (Goods goods : goodsList) { // System.out.println(goods); // }//自定義的方法是分詞后 and的關系 必須全部滿足List<Goods> goodsList2 = goodsMapper.findByName("2018新款李白",PageRequest.of(1,10));for (Goods goods : goodsList2) {System.out.println(goods);}} }pom
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.1.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.tjx</groupId><artifactId>elasticsearch_springboot</artifactId><version>0.0.1-SNAPSHOT</version><name>elasticsearch_springboot</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency><!--<dependency>--><!--<groupId>org.elasticsearch.plugin</groupId>--><!--<artifactId>transport-netty4-client</artifactId>--><!--<version>7.3.2</version>--><!--</dependency>--><!--<dependency>--><!--<groupId>org.elasticsearch.client</groupId>--><!--<artifactId>transport</artifactId>--><!--<version>7.3.2</version>--><!--</dependency>--><!--<dependency>--><!--<groupId>org.elasticsearch</groupId>--><!--<artifactId>elasticsearch</artifactId>--><!--<version>7.3.2</version>--><!--</dependency>--><!--<dependency>--><!--<groupId>org.elasticsearch.client</groupId>--><!--<artifactId>elasticsearch-rest-high-level-client</artifactId>--><!--<version>7.3.2</version>--><!--</dependency>--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!-- mybatis依賴 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.0.0</version></dependency><!-- druid數據源依賴 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.12</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>源碼git地址: https://gitee.com/hfl-learn-note/elasticsearch_springboot
完
總結
以上是生活随笔為你收集整理的springtboot 操作es的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Dota2锁区steam下载国际服办法
- 下一篇: vcenter 起不来报错VMware