当前位置:   article > 正文

elasticSearch从零整合springboot项目实操

elasticSearch从零整合springboot项目实操

 type会被弃用 ,就是说之后的elasticSearch中只会存在 索引(indices) 和  一行(document)  和字段(fields)

elasticSearch 和solr的区别最大的就是 es对应的 是 json的格式 。 solr有xml和josn等等。但是es更强

核心数据原理

对于某个字段搜索出来的结果有很多, 更具相似的设置对应的文档的权重进行排序。

就像是这样建立索引

             

        

ik分词器,如果想要自定义的搜索的标签可以自行加到ik分词器中。ik分词器作为一个插件,需要手动的添加到elasticSearch中的plugin中。 

分词算法,有ik_smart 和ik_max_word ,其中ik_smart为最少切分 ,ik_max_word是最细粒度切分。 

ik_max_word:能够将所有的可能都展示出来

ik_smart: 展示的比较少

如何定义自定义的分词

可以看见 狂神说,不是一个分词。

可以在ik分词器中自定义一个 狂神说

之后启动 es 和kibana 的bat ,再npm run start  页面head 

这样,狂神说就变成了一个分词

es是支持Rest风格的api

这里进行添加数据

这里尝试在同一个索引库中添加  类属于不同类型 的数据

结论:直接报错。 说在7.0版本上一个索引库只能够有一个类型 。可以看出 这个类型没有任何作用。  对应如前面说所的,type这个字段在8.0将会被删除。

其实这玩意本质就是一个数据库。

get 这就不用说了,

上手springboot整合es  Test

  1. @SpringBootTest
  2. class JueJiuApplicationTests {
  3. @Autowired
  4. private RedisTemplate redisTemplate;
  5. @Autowired
  6. TokenGenerate tokenGenerate;
  7. @Autowired
  8. RestHighLevelClient highLevelClient;
  9. @Autowired
  10. EssayService essayService;
  11. @Test
  12. void contextLoads() {
  13. }
  14. /**处理 Essay的数据
  15. *
  16. * 这里将mysql的数据都batch到es中
  17. *
  18. * */
  19. @Test
  20. void mysqlAndES(){
  21. List<Essay> list = essayService.list();
  22. list.forEach(one->{
  23. System.out.println(one.toString());
  24. });
  25. }
  26. @Test
  27. void createIndex() throws IOException {
  28. /**
  29. * 创建一个索引
  30. * */
  31. String indexName = "juejiu";
  32. CreateIndexRequest createIndexRequest = new CreateIndexRequest(indexName);
  33. highLevelClient.indices().create( createIndexRequest , RequestOptions.DEFAULT);
  34. /**查询索引的信息
  35. * */
  36. // GetIndexRequest getIndexRequest = new GetIndexRequest(indexName);
  37. // GetIndexResponse getIndexResponse = highLevelClient
  38. // .indices().get(getIndexRequest, RequestOptions.DEFAULT);
  39. // System.out.println("----------------打印出索引的信息" + getIndexResponse);
  40. /**
  41. * 删除索引信息
  42. * */
  43. // DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest(indexName) ;
  44. // AcknowledgedResponse delete = highLevelClient.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);
  45. // System.out.println("----------------删除出索引的信息" + delete.toString());
  46. // System.out.println("----------------删除出索引的信息" + delete.isAcknowledged());
  47. }
  48. @Test
  49. void saveToES() throws IOException {
  50. String indexName = "juejiu";
  51. IPage<EssayDto> iPage = new Page<>();
  52. iPage.setCurrent(1);
  53. iPage.setSize(100);
  54. EssayVo essayVo = new EssayVo();
  55. IPage<EssayDto> page = essayService.getPage(iPage, essayVo);
  56. BulkRequest bulkRequest = new BulkRequest();
  57. page.getRecords().forEach(one->{
  58. IndexRequest indexRequest = new IndexRequest()
  59. .source(JSON.toJSONString(one), XContentType.JSON)
  60. .index(indexName);
  61. bulkRequest.add(indexRequest);
  62. });
  63. BulkResponse bulkResponse = highLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
  64. System.out.println("---------bulk的结果"+ (!bulkResponse.hasFailures()));
  65. }
  66. @Test
  67. /***/
  68. void searchResult() throws IOException {
  69. String indexName = "juejiu";
  70. SearchRequest searchRequest = new SearchRequest(indexName);
  71. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  72. Query query = new Query(4,1);
  73. searchSourceBuilder.from(query.getCurrent());
  74. searchSourceBuilder.size(query.getSize());
  75. /***
  76. * 添加查询条件
  77. * */
  78. searchRequest.source(searchSourceBuilder);
  79. SearchResponse search = highLevelClient.search(searchRequest, RequestOptions.DEFAULT);
  80. System.out.println(search);
  81. System.out.println("-----------");
  82. System.out.println(search.getHits());
  83. search.getHits().forEach(one->{
  84. System.out.println("单个的hit"+one.getSourceAsString());
  85. });
  86. }

springboot整合ES实现 论坛的 es替换查询

  1. String indexName = "juejiu";
  2. SearchRequest searchRequest = new SearchRequest(indexName);
  3. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  4. searchSourceBuilder.from(query.getCurrent());
  5. searchSourceBuilder.size(query.getSize());
  6. /***
  7. * 添加查询条件
  8. * */
  9. searchRequest.source(searchSourceBuilder);
  10. SearchResponse search = highLevelClient.search(searchRequest, RequestOptions.DEFAULT);
  11. /**
  12. * 暂停原代码 不返回page对象
  13. *
  14. * */
  15. //
  16. // System.out.println("-----------------------------"+query.toString());
  17. // System.out.println("-----------------------------"+essayVo.toString());
  18. // IPage<EssayDto> iPage = new Page<>();
  19. // iPage.setCurrent(query.getCurrent());
  20. // iPage.setSize(query.getSize());
  21. // IPage<EssayDto> list = essayService.getPage(iPage,essayVo);
  22. // HashMap hashMap = new HashMap<>();
  23. // list.getRecords().stream().map(one -> {
  24. // Date createTime = one.getCreateTime();
  25. // String essayTitle = one.getEssayTitle();
  26. // hashMap.put(createTime, essayTitle);
  27. // return null;
  28. // }).collect(Collectors.toList());
  29. // System.out.println("----------------------------------------");
  30. // System.out.println(hashMap);
  31. IPage<EssayDto> iPage = new Page();
  32. List<EssayDto> list = new ArrayList<>();
  33. search.getHits().forEach(one->{
  34. Map<String, Object> sourceAsMap = one.getSourceAsMap();
  35. EssayDto essayDto = new EssayDto();
  36. essayDto.setEssayId((Integer) sourceAsMap.get("essayId"));
  37. essayDto.setEssayTitle(sourceAsMap.get("essayTitle").toString());
  38. essayDto.setEssayContext(sourceAsMap.get("essayContext").toString());
  39. essayDto.setEssayPageViewTimes((Integer) sourceAsMap.get("essayPageViewTimes"));
  40. essayDto.setCreateTime(Date.from(LocalDateTime.parse(sourceAsMap.get("createTime").toString(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")).atZone(ZoneId.systemDefault()).toInstant()));
  41. Map<String, Object> userMap = (Map<String, Object>) sourceAsMap.get("user");
  42. User user = new User();
  43. user.setId((Integer) userMap.get("id"));
  44. user.setAccount(userMap.get("account").toString());
  45. user.setPassword(userMap.get("password").toString());
  46. user.setAvatar(userMap.get("avatar").toString());
  47. user.setPhone(userMap.get("phone").toString());
  48. user.setRealName(userMap.get("realName").toString());
  49. user.setEmail(userMap.get("email").toString());
  50. user.setSex((Integer) userMap.get("sex"));
  51. // user.setBirthday(String.valueOf(Date.parse(userMap.get("birthday").toString())));
  52. essayDto.setUser(user);
  53. Map<String, Object> tagMap = (Map<String, Object>) sourceAsMap.get("tag");
  54. Tag tag = new Tag();
  55. tag.setTagId((Integer) tagMap.get("tagId"));
  56. tag.setTagName(tagMap.get("tagName").toString());
  57. essayDto.setTag(tag);
  58. essayDto.setUserId((Integer) sourceAsMap.get("userId"));
  59. essayDto.setEssayPageViewTimes((Integer) sourceAsMap.get("essayPageViewTimes"));
  60. essayDto.setCreateTime(Date.from(LocalDateTime.parse(sourceAsMap.get("createTime").toString(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")).atZone(ZoneId.systemDefault()).toInstant()));
  61. essayDto.setEssayId((Integer) sourceAsMap.get("essayId"));
  62. essayDto.setUser(user);
  63. essayDto.setTag(tag);
  64. list.add(essayDto);
  65. });
  66. iPage.setRecords(list);
  67. iPage.setCurrent(query.getCurrent());
  68. iPage.setSize(query.getSize());
  69. return Result.SUCCESS(iPage);

单体的es 实现easy

后续提供更新策略 和多条件等结果

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/443455?site
推荐阅读
相关标签
  

闽ICP备14008679号