2020年10月20日星期二

elasticsearch7.6.2

一 整合

整合代码放在 https://gitee.com/elvinle/jd_pachong.git 中, 并不复杂 

elasticsearch 官方推荐使用 rest 方式进行操作.

 

二 库操作

private static String INDEX_DEFAULT = "elvin";private static String INDEX_JD = "jd_goods";@AutowiredRestHighLevelClient client;//region 索引库操作//创建索引@Testpublic void createIndex() throws Exception { CreateIndexRequest createReq = new CreateIndexRequest(INDEX_DEFAULT); CreateIndexResponse resp = client.indices().create(createReq, RequestOptions.DEFAULT); System.out.println(JSON.toJSONString(resp));}//判断索引是否存在@Testpublic void existsIndex() throws Exception { GetIndexRequest createIndexReq = new GetIndexRequest(INDEX_DEFAULT); boolean exists = client.indices().exists(createIndexReq, RequestOptions.DEFAULT); System.out.println(JSON.toJSONString(exists));}//删除索引@Testpublic void deleteIndex() throws Exception { DeleteIndexRequest deleteReq = new DeleteIndexRequest(INDEX_DEFAULT); AcknowledgedResponse resp = client.indices().delete(deleteReq, RequestOptions.DEFAULT); System.out.println(JSON.toJSONString(resp));}//endregion

建库一般都是提前建好的.

 

三 文档操作

//region 文档操作//创建文档@Testpublic void addDoc() throws Exception{ User user = User.builder()   .id("1")   .name("elvin")   .age(29)   .work("java软件开发工程师")   .hobby(new ArrayList<String>() {{    add("篮球");    add("羽毛球");    add("乒乓球");    add("游泳");   }})   .desc("一个喜欢运动, 爱老婆的boy").build(); IndexRequest req = new IndexRequest(INDEX_DEFAULT); req.id(user.getId()); req.timeout("5s"); req.source(JSON.toJSONString(user), XContentType.JSON); IndexResponse resp = client.index(req, RequestOptions.DEFAULT); System.out.println("添加文档 -> " + req.toString()); System.out.println("结果 -> " + resp.toString()); System.out.println("状态 -> " + resp.status());}//判断文档是否存在@Testpublic void existsDoc() throws Exception{ GetRequest req = new GetRequest(INDEX_DEFAULT, "1"); boolean exists = client.exists(req, RequestOptions.DEFAULT); System.out.println("文档是否存在 : " + exists);}//根据id获取文档@Testpublic void getDoc() throws Exception{ GetRequest req = new GetRequest(INDEX_DEFAULT, "1"); GetResponse resp = client.get(req, RequestOptions.DEFAULT); System.out.println("获取到的文档 : " + resp.getSourceAsString());}//修改文档@Testpublic void updateDoc() throws Exception{ User user = new User(); user.setDesc("热爱生活和热爱工作"); UpdateRequest req = new UpdateRequest(INDEX_DEFAULT, "1"); req.id("1"); req.timeout("5s"); req.doc(JSON.toJSONString(user), XContentType.JSON); UpdateResponse resp = client.update(req, RequestOptions.DEFAULT); System.out.println("修改文档 --> " + req.toString()); System.out.println("修改结果 --> " + resp.status()); //getDoc();}//根据id删除文档@Testpublic void deleteDoc() throws Exception{ DeleteRequest req = new DeleteRequest(INDEX_DEFAULT, "1"); DeleteResponse resp = client.delete(req, RequestOptions.DEFAULT); System.out.println("获取到的文档 : " + resp.status());}//批量添加@Testpublic void bulkAddDoc() throws Exception{ List<User> userList = new ArrayList<>(); for (int i = 1; i < 11; i++) {  User user = User.builder()    .id(String.valueOf(i))    .name("elvin" + i)    .age(29)    .work("java软件开发工程师")    .hobby(new ArrayList<String>() {{     add("篮球");     add("羽毛球");     add("乒乓球");     add("游泳");    }})    .desc("一个喜欢运动, 爱老婆的boy")    .build();  userList.add(user); } BulkRequest req = new BulkRequest(); req.timeout("5s"); for (int i = 0; i < userList.size(); i++) {  req.add(new IndexRequest(INDEX_DEFAULT)    .id(String.valueOf(i + 1 ))    .source(JSON.toJSONString(userList.get(i)), XContentType.JSON)  ); } BulkResponse resp = client.bulk(req, RequestOptions.DEFAULT); System.out.println("批量添加文档 -> " + resp.hasFailures());}//查询文档@Testpublic void searchDoc() throws Exception{ SearchRequest req = new SearchRequest(INDEX_JD); //构建查询条件 SearchSourceBuilder reqSourceBuilder = new SearchSourceBuilder(); //设置分页 reqSourceBuilder.from(0); reqSourceBuilder.size(5); //设置高亮 HighlightBuilder highlightBuilder = new HighlightBuilder(); highlightBuilder.field("title"); highlightBuilder.preTags("<span style='color:red'>"); highlightBuilder.postTags("</span>"); reqSourceBuilder.highlighter(highlightBuilder); //term查询 TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("title", "java"); reqSourceBuilder.query(termQueryBuilder); reqSourceBuilder.timeout(new TimeValue(5, TimeUnit.SECONDS)); req.source(reqSourceBuilder); SearchResponse resp = client.search(req, RequestOptions.DEFAULT); System.out.println("测试查询文档-----"+JSON.toJSONString(resp.getHits())); System.out.println("====================="); for (SearchHit documentFields : resp.getHits().getHits()) {  System.out.println("测试查询文档--遍历参数--"+documentFields.getSourceAsMap()); } System.out.println("----------替换高亮列-----------"); //解析结果 ArrayList<Map<String, Object>> list = new ArrayList<>(); for (SearchHit hit : resp.getHits().getHits()) {  //解析高亮的字段  Map<String, HighlightField> highlightFields = hit.getHighlightFields();  HighlightField title = highlightFields.get("title");  Map<String, Object> sourceAsMap = hit.getSourceAsMap();  //解析高亮的字段  if(title != null){   Text[] fragments = title.fragments();   String n_title = "";   for (Text text : fragments) {    n_title += text;   }   //将高亮的字段替换掉原来的字段   sourceAsMap.put("title", n_title);  }  list.add(sourceAsMap); } list.forEach(n-> System.out.println(JSON.toJSONString(n)));}//endregion

文档操作中, 可能查询比较多用一点. 增删改可以通过 canal 来完成.

原文转载:http://www.shaoqun.com/a/481303.html

hemingway:https://www.ikjzd.com/w/2344

韩国naver:https://www.ikjzd.com/w/1727

淘粉吧怎么返利:https://www.ikjzd.com/w/1725


一整合整合代码放在https://gitee.com/elvinle/jd_pachong.git中,并不复杂elasticsearch官方推荐使用rest方式进行操作.二库操作privatestaticStringINDEX_DEFAULT="elvin";privatestaticStringINDEX_JD="jd_goods";@AutowiredR
王惟:https://www.ikjzd.com/w/1744
kkr:https://www.ikjzd.com/w/1340
惠州雷公峡漂流要门票吗?门票是多少?:http://tour.shaoqun.com/a/2736.html
【版纳旅游】—云南西双版纳特产:木碗 - :http://tour.shaoqun.com/a/50000.html
【去加拿大旅游签证好签吗】--去加拿大旅游签证怎么办理:http://tour.shaoqun.com/a/64859.html

没有评论:

发表评论