123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- 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<EsProduct> 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<String, Object> 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("</span>");
- highlightBuilder.preTags("<span style='color:red'>");
- 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<String, Object> sourceAsMap = hit.getSourceAsMap();
- //获取高亮字段
- Map<String, HighlightField> 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<String, Object> sourceAsMap = hit.getSourceAsMap();
- System.out.println(sourceAsMap);
- }
- }
- }
|