EsDocTests.java 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. package com.sw;
  2. import com.alibaba.fastjson.JSON;
  3. import com.sw.domain.SysTest;
  4. import com.sw.domain.po.EsProduct;
  5. import com.sw.util.ParseHtml;
  6. import org.elasticsearch.action.bulk.BulkRequest;
  7. import org.elasticsearch.action.delete.DeleteRequest;
  8. import org.elasticsearch.action.get.GetRequest;
  9. import org.elasticsearch.action.get.GetResponse;
  10. import org.elasticsearch.action.index.IndexRequest;
  11. import org.elasticsearch.action.index.IndexResponse;
  12. import org.elasticsearch.action.search.SearchRequest;
  13. import org.elasticsearch.action.search.SearchRequestBuilder;
  14. import org.elasticsearch.action.search.SearchResponse;
  15. import org.elasticsearch.action.update.UpdateRequest;
  16. import org.elasticsearch.client.RequestOptions;
  17. import org.elasticsearch.client.RestHighLevelClient;
  18. import org.elasticsearch.client.core.CountRequest;
  19. import org.elasticsearch.common.document.DocumentField;
  20. import org.elasticsearch.common.text.Text;
  21. import org.elasticsearch.common.xcontent.XContentType;
  22. import org.elasticsearch.core.TimeValue;
  23. import org.elasticsearch.index.query.*;
  24. import org.elasticsearch.search.SearchHit;
  25. import org.elasticsearch.search.SearchHits;
  26. import org.elasticsearch.search.builder.SearchSourceBuilder;
  27. import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
  28. import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
  29. import org.elasticsearch.search.sort.SortBuilder;
  30. import org.elasticsearch.search.sort.SortBuilders;
  31. import org.elasticsearch.search.sort.SortOrder;
  32. import org.junit.Test;
  33. import org.junit.runner.RunWith;
  34. import org.springframework.beans.factory.annotation.Autowired;
  35. import org.springframework.beans.factory.annotation.Qualifier;
  36. import org.springframework.boot.test.context.SpringBootTest;
  37. import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
  38. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
  39. import java.io.IOException;
  40. import java.util.List;
  41. import java.util.Map;
  42. import java.util.concurrent.TimeUnit;
  43. /**
  44. * @author yegang
  45. * @create 2022-03-09 14:21
  46. **/
  47. @SpringBootTest
  48. @RunWith(SpringJUnit4ClassRunner.class)
  49. public class EsDocTests {
  50. @Autowired
  51. private ElasticsearchRestTemplate elasticsearchRestTemplate;
  52. @Autowired
  53. @Qualifier("restHighLevelClient")
  54. private RestHighLevelClient client;
  55. /**
  56. * 添加文档
  57. * @throws IOException
  58. */
  59. @Test
  60. public void putTest() throws IOException {
  61. //创建数据对象
  62. 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);
  63. IndexRequest indexRequest = new IndexRequest("yg");
  64. //设置请求规则,设置请求id
  65. indexRequest.id("1");
  66. //设置请求规则,设置请求超时时间
  67. indexRequest.timeout(TimeValue.timeValueSeconds(1));
  68. indexRequest.timeout("1s");
  69. //请求绑定数据 以json格式
  70. indexRequest.source(JSON.toJSONString(esProduct), XContentType.JSON);
  71. //执行请求
  72. IndexResponse index = client.index(indexRequest, RequestOptions.DEFAULT);
  73. System.out.println(index.toString());
  74. System.out.println(index.status());
  75. }
  76. @Test
  77. /**
  78. * 批量添加
  79. */
  80. public void putbatchTest() throws IOException {
  81. //创建数据对象
  82. List<EsProduct> list = ParseHtml.parse("java");
  83. BulkRequest bulkRequest = new BulkRequest();
  84. bulkRequest.timeout("2m");
  85. for(EsProduct esProduct :list){
  86. bulkRequest.add(new IndexRequest("jd_list").source(JSON.toJSONString(esProduct), XContentType.JSON));
  87. }
  88. client.bulk(bulkRequest,RequestOptions.DEFAULT);
  89. }
  90. /**
  91. * 获取文档
  92. */
  93. @Test
  94. public void getTest() throws IOException {
  95. GetRequest getRequest = new GetRequest("yg","1");
  96. boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);
  97. if(exists){
  98. GetResponse documentFields = client.get(getRequest, RequestOptions.DEFAULT);
  99. Map<String, Object> source = documentFields.getSource();
  100. System.out.println(source);
  101. }
  102. }
  103. /**
  104. * 更新文档
  105. */
  106. @Test
  107. public void updateTest() throws IOException {
  108. 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);
  109. UpdateRequest updateRequest = new UpdateRequest("yg","1");
  110. updateRequest.timeout("2s");
  111. updateRequest.doc(JSON.toJSONString(esProduct),XContentType.JSON);
  112. client.update(updateRequest,RequestOptions.DEFAULT);
  113. }
  114. /**
  115. * 更新文档
  116. */
  117. @Test
  118. public void delTest() throws IOException {
  119. 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);
  120. DeleteRequest deleteRequest = new DeleteRequest("yg","1");
  121. deleteRequest.timeout("2s");
  122. client.delete(deleteRequest,RequestOptions.DEFAULT);
  123. }
  124. /**
  125. * 查询
  126. */
  127. @Test
  128. public void searchTest() throws IOException {
  129. SearchRequest searchRequest = new SearchRequest("jd_list");
  130. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  131. QueryBuilder queryBuilder = QueryBuilders.termQuery("name","JavaScript高级程序设计 第4版(图灵出品) web前端开发教程,JS'红宝书'升级,入门+实战,涵盖ECMAScript,2019,提供教学视频+配套编程环境,可直接在线运行随书代码");
  132. searchSourceBuilder.query(queryBuilder);
  133. searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
  134. searchSourceBuilder.from(1);
  135. SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);
  136. SearchHits hits = search.getHits();
  137. System.out.println(JSON.toJSONString(hits));
  138. }
  139. /**
  140. * 查询
  141. */
  142. @Test
  143. public void searchTest2() throws IOException {
  144. SearchRequest searchRequest = new SearchRequest("jd_list");
  145. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  146. String[] includes =new String[4];
  147. includes[0]="name";
  148. includes[1]="price";
  149. includes[2]="url";
  150. includes[3]="num";
  151. searchSourceBuilder.fetchSource(includes, null);//过滤为null数据
  152. searchSourceBuilder.sort("num",SortOrder.DESC);
  153. //模糊查询
  154. QueryBuilder queryBuilder = QueryBuilders.termQuery("name","java");
  155. searchSourceBuilder.query(queryBuilder);
  156. //设置高亮
  157. HighlightBuilder highlightBuilder = new HighlightBuilder();
  158. highlightBuilder.field("name");
  159. highlightBuilder.postTags("</span>");
  160. highlightBuilder.preTags("<span style='color:red'>");
  161. highlightBuilder.requireFieldMatch(false);
  162. searchSourceBuilder.highlighter(highlightBuilder);
  163. //设置超时
  164. searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
  165. //设置起始位置
  166. searchSourceBuilder.from(1);
  167. //设置页大小
  168. searchSourceBuilder.size(30);
  169. //绑定build
  170. searchRequest.source(searchSourceBuilder);
  171. //执行搜索
  172. SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
  173. //遍历hits
  174. for (SearchHit hit : searchResponse.getHits().getHits()) {
  175. Map<String, Object> sourceAsMap = hit.getSourceAsMap();
  176. //获取高亮字段
  177. Map<String, HighlightField> highlightFields = hit.getHighlightFields();
  178. //获取name字段的高亮信息
  179. HighlightField highlightField = highlightFields.get("name");
  180. if(highlightField !=null){
  181. Text[] fragments = highlightField.getFragments();
  182. String n_name ="";
  183. for (Text fragment : fragments) {
  184. n_name+=fragment;
  185. }
  186. //置换
  187. sourceAsMap.put("name",n_name);
  188. }
  189. System.out.println(sourceAsMap);
  190. }
  191. }
  192. /**
  193. * 查询
  194. */
  195. @Test
  196. public void searchTest3() throws IOException {
  197. SearchRequest searchRequest = new SearchRequest("jd_list");
  198. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  199. searchSourceBuilder.sort("num",SortOrder.DESC);
  200. //模糊查询
  201. BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
  202. boolQueryBuilder.must(QueryBuilders.matchQuery("name","java"));
  203. boolQueryBuilder.must(QueryBuilders.rangeQuery("price").gt("100").lt("200"));
  204. searchSourceBuilder.query(boolQueryBuilder);
  205. //设置超时
  206. searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
  207. //设置起始位置
  208. searchSourceBuilder.from(10);
  209. //设置页大小
  210. searchSourceBuilder.size(10);
  211. //绑定build
  212. searchRequest.source(searchSourceBuilder);
  213. //执行搜索
  214. SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
  215. System.out.println(searchResponse.getHits().getTotalHits());
  216. //遍历hits
  217. for (SearchHit hit : searchResponse.getHits().getHits()) {
  218. Map<String, Object> sourceAsMap = hit.getSourceAsMap();
  219. System.out.println(sourceAsMap);
  220. }
  221. }
  222. }