文章目录

  • 三大块
    • 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相关推荐

  1. Spring Boot操作ES进行各种高级查询(值得收藏)

    作者 | 后青春期的Keats 来源 | http://cnblogs.com/keatsCoder/p/11341835.html SpringBoot整合ES 创建SpringBoot项目,导入 ...

  2. java 操作 ES 的方式 整理总结

    一.操作ES 的方式大题有这么三种 1. TransportClinet客户端 2. REST Client 3. SpringDateES 二.第一种 TransportClinet客户端 首先要讲 ...

  3. SpringBoot高级-检索-SpringBoot整合Jest操作ES

    接下来就用SpringBoot来整合ElasticSearch进行测试,pom文件引入了spring-boot-starter-data-elasticsearch,其实加了data都是用spring ...

  4. spring boot 使用 bboss 操作 ES

    目前项目中将日志记录在ES中,就找了下比较简单的操作ES的方法找了好做最后选择用bboss,用起来太简单- package com.td.tdgistaskservice.es.crud;import ...

  5. springboot操作ES之ElasticSearch_EasyEs

    springboot操作ES之ElasticSearch_EasyEs 前置环境 es:7.x springboot:2.6.0 easyes:1.0.2 1.导入依赖 <dependency& ...

  6. ElasticSearch之——Java操作ES实例(基于ES-2.3.0)

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/78758691 今天,我们就来看看如何利用Java API来操作ES的数据,这里不讲 ...

  7. SpringBoot操作ES进行各种高级查询(值得收藏)

    来源:cnblogs.com/keatsCoder/p/11341835.html SpringBoot整合ES 创建SpringBoot项目,导入 ES 6.2.1 的 RestClient 依赖和 ...

  8. ElasticSearch-TransportClient客户端操作Es(五)

    引入maven依赖 <dependency><groupId>org.elasticsearch</groupId><artifactId>elasti ...

  9. SpringBoot 操作 ES 进行各种高级查询

    点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 每天 14:00 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java ...

  10. SpringBoot操作ES进行各种高级查询

    SpringBoot整合ES 创建SpringBoot项目,导入 ES 6.2.1 的 RestClient 依赖和 ES 依赖.在项目中直接引用 es-starter 的话会报容器初始化异常错误,导 ...

最新文章

  1. 如何写新的C++ OP
  2. 使用 TOGAF 9.1 框架與 ArchiMate 3.0 建模語言
  3. coco creator编辑动画坑之拖图片
  4. 项目-团队-技术-个人(专业篇)
  5. Vantage公司增资3亿美元加强数据中心建设
  6. 完全“撞脸”今日头条,这家店火了!已被今日头条起诉商标侵权...
  7. Linux 下 Error: Could not find or load main class Hello world
  8. .xsession-errors:openConnection: connect: No such file or directory cannot connect to brltty at :0
  9. php的登陆代码,PHP登陆页面完整代码
  10. 一行.bat代码实现win+L锁定计算机立即锁屏
  11. Linux系统录制gif动画
  12. 魅族开售跳票,创饥饿营销新高度?
  13. Excel数据分析day1
  14. Android UI美化——颜色
  15. 准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F值(F-Measure)、AUC、ROC的理解
  16. 50天入门人工智能!
  17. 上面一个星星下面一个r_谁能告诉我微博那个红色五角星有个R?
  18. 华为防火墙理论与管理
  19. D咚买菜抢购autojs核心代码分享
  20. 2022年未来网络与通信专题讲座(南京专技人员继续教育)

热门文章

  1. qcow2和vmdk互相转
  2. 将心比心,我要有点骨气
  3. 微信小程序:UI好看的王者荣耀战力查询助手小程序源码
  4. 游戏服务端究竟解决了什么问题?
  5. java实现断点续播_哪些播放器有断点续播和定点播放功能?
  6. linux libssl.so.6,centos6 安装directadmin出现libssl.so.6找不到问题
  7. GWT-基本概念及理解
  8. 漫谈CRM体系化建设1 – CRM与客户管理综述
  9. html文档在word打开是乱码怎么解决,word打开是乱码怎么办?怎么解决
  10. (亲测解决)每次打开excel文件都会出现两个窗口,一个是空白的sheet1,另一个是自己的文档