package com.sw; import com.alibaba.fastjson.JSON; import com.sw.domain.SysTest; import com.sw.domain.po.EsProduct; import com.sw.util.ParseHtml; import org.elasticsearch.action.bulk.BulkRequest; import org.elasticsearch.action.delete.DeleteRequest; import org.elasticsearch.action.get.GetRequest; import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.update.UpdateRequest; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.client.core.CountRequest; import org.elasticsearch.common.document.DocumentField; import org.elasticsearch.common.text.Text; import org.elasticsearch.common.xcontent.XContentType; import org.elasticsearch.core.TimeValue; import org.elasticsearch.index.query.*; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHits; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder; import org.elasticsearch.search.fetch.subphase.highlight.HighlightField; import org.elasticsearch.search.sort.SortBuilder; import org.elasticsearch.search.sort.SortBuilders; import org.elasticsearch.search.sort.SortOrder; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import java.io.IOException; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; /** * @author yegang * @create 2022-03-09 14:21 **/ @SpringBootTest @RunWith(SpringJUnit4ClassRunner.class) public class EsDocTests { @Autowired private ElasticsearchRestTemplate elasticsearchRestTemplate; @Autowired @Qualifier("restHighLevelClient") private RestHighLevelClient client; /** * 添加文档 * @throws IOException */ @Test public void putTest() throws IOException { //创建数据对象 EsProduct esProduct = new EsProduct(1,"水浒传","https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimgservice.suning.cn%2Fuimg1%2Fb2c%2Fimage%2Fxqvo6GQUdf3Qi65VvhzkrQ.png_800w_800h_4e&refer=http%3A%2F%2Fimgservice.suning.cn&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1649469488&t=95064a70d6145bbf6f1615b1806709ad","99.8",100); IndexRequest indexRequest = new IndexRequest("yg"); //设置请求规则,设置请求id indexRequest.id("1"); //设置请求规则,设置请求超时时间 indexRequest.timeout(TimeValue.timeValueSeconds(1)); indexRequest.timeout("1s"); //请求绑定数据 以json格式 indexRequest.source(JSON.toJSONString(esProduct), XContentType.JSON); //执行请求 IndexResponse index = client.index(indexRequest, RequestOptions.DEFAULT); System.out.println(index.toString()); System.out.println(index.status()); } @Test /** * 批量添加 */ public void putbatchTest() throws IOException { //创建数据对象 List list = ParseHtml.parse("java"); BulkRequest bulkRequest = new BulkRequest(); bulkRequest.timeout("2m"); for(EsProduct esProduct :list){ bulkRequest.add(new IndexRequest("jd_list").source(JSON.toJSONString(esProduct), XContentType.JSON)); } client.bulk(bulkRequest,RequestOptions.DEFAULT); } /** * 获取文档 */ @Test public void getTest() throws IOException { GetRequest getRequest = new GetRequest("yg","1"); boolean exists = client.exists(getRequest, RequestOptions.DEFAULT); if(exists){ GetResponse documentFields = client.get(getRequest, RequestOptions.DEFAULT); Map source = documentFields.getSource(); System.out.println(source); } } /** * 更新文档 */ @Test public void updateTest() throws IOException { EsProduct esProduct = new EsProduct(1,"水浒传","https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimgservice.suning.cn%2Fuimg1%2Fb2c%2Fimage%2Fxqvo6GQUdf3Qi65VvhzkrQ.png_800w_800h_4e&refer=http%3A%2F%2Fimgservice.suning.cn&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1649469488&t=95064a70d6145bbf6f1615b1806709ad","100.8",100); UpdateRequest updateRequest = new UpdateRequest("yg","1"); updateRequest.timeout("2s"); updateRequest.doc(JSON.toJSONString(esProduct),XContentType.JSON); client.update(updateRequest,RequestOptions.DEFAULT); } /** * 更新文档 */ @Test public void delTest() throws IOException { EsProduct esProduct = new EsProduct(1,"水浒传","https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimgservice.suning.cn%2Fuimg1%2Fb2c%2Fimage%2Fxqvo6GQUdf3Qi65VvhzkrQ.png_800w_800h_4e&refer=http%3A%2F%2Fimgservice.suning.cn&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1649469488&t=95064a70d6145bbf6f1615b1806709ad","100.8",200); DeleteRequest deleteRequest = new DeleteRequest("yg","1"); deleteRequest.timeout("2s"); client.delete(deleteRequest,RequestOptions.DEFAULT); } /** * 查询 */ @Test public void searchTest() throws IOException { SearchRequest searchRequest = new SearchRequest("jd_list"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); QueryBuilder queryBuilder = QueryBuilders.termQuery("name","JavaScript高级程序设计 第4版(图灵出品) web前端开发教程,JS'红宝书'升级,入门+实战,涵盖ECMAScript,2019,提供教学视频+配套编程环境,可直接在线运行随书代码"); searchSourceBuilder.query(queryBuilder); searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS)); searchSourceBuilder.from(1); SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT); SearchHits hits = search.getHits(); System.out.println(JSON.toJSONString(hits)); } /** * 查询 */ @Test public void searchTest2() throws IOException { SearchRequest searchRequest = new SearchRequest("jd_list"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); String[] includes =new String[4]; includes[0]="name"; includes[1]="price"; includes[2]="url"; includes[3]="num"; searchSourceBuilder.fetchSource(includes, null);//过滤为null数据 searchSourceBuilder.sort("num",SortOrder.DESC); //模糊查询 QueryBuilder queryBuilder = QueryBuilders.termQuery("name","java"); searchSourceBuilder.query(queryBuilder); //设置高亮 HighlightBuilder highlightBuilder = new HighlightBuilder(); highlightBuilder.field("name"); highlightBuilder.postTags(""); highlightBuilder.preTags(""); highlightBuilder.requireFieldMatch(false); searchSourceBuilder.highlighter(highlightBuilder); //设置超时 searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS)); //设置起始位置 searchSourceBuilder.from(1); //设置页大小 searchSourceBuilder.size(30); //绑定build searchRequest.source(searchSourceBuilder); //执行搜索 SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); //遍历hits for (SearchHit hit : searchResponse.getHits().getHits()) { Map sourceAsMap = hit.getSourceAsMap(); //获取高亮字段 Map highlightFields = hit.getHighlightFields(); //获取name字段的高亮信息 HighlightField highlightField = highlightFields.get("name"); if(highlightField !=null){ Text[] fragments = highlightField.getFragments(); String n_name =""; for (Text fragment : fragments) { n_name+=fragment; } //置换 sourceAsMap.put("name",n_name); } System.out.println(sourceAsMap); } } /** * 查询 */ @Test public void searchTest3() throws IOException { SearchRequest searchRequest = new SearchRequest("jd_list"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.sort("num",SortOrder.DESC); //模糊查询 BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); boolQueryBuilder.must(QueryBuilders.matchQuery("name","java")); boolQueryBuilder.must(QueryBuilders.rangeQuery("price").gt("100").lt("200")); searchSourceBuilder.query(boolQueryBuilder); //设置超时 searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS)); //设置起始位置 searchSourceBuilder.from(10); //设置页大小 searchSourceBuilder.size(10); //绑定build searchRequest.source(searchSourceBuilder); //执行搜索 SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); System.out.println(searchResponse.getHits().getTotalHits()); //遍历hits for (SearchHit hit : searchResponse.getHits().getHits()) { Map sourceAsMap = hit.getSourceAsMap(); System.out.println(sourceAsMap); } } }