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

java 复制代码
@SpringBootTest
class JueJiuApplicationTests {
@Autowired
private RedisTemplate redisTemplate;
@Autowired
    TokenGenerate tokenGenerate;

@Autowired
    RestHighLevelClient highLevelClient;


@Autowired
    EssayService essayService;
    @Test
    void contextLoads() {

        }
        /**处理 Essay的数据
         *
         * 这里将mysql的数据都batch到es中
         *
         * */
        @Test
    void  mysqlAndES(){
            List<Essay> list = essayService.list();
           list.forEach(one->{
               System.out.println(one.toString());


           });

        }
        @Test
   void  createIndex() throws IOException {
     /**
      * 创建一个索引
      * */
       String   indexName = "juejiu";
       CreateIndexRequest  createIndexRequest = new CreateIndexRequest(indexName);
       highLevelClient.indices().create( createIndexRequest , RequestOptions.DEFAULT);

    /**查询索引的信息
     * */

//            GetIndexRequest getIndexRequest = new GetIndexRequest(indexName);
//            GetIndexResponse getIndexResponse = highLevelClient
//                    .indices().get(getIndexRequest, RequestOptions.DEFAULT);
//            System.out.println("----------------打印出索引的信息" + getIndexResponse);

    /**
     *  删除索引信息
     * */
//            DeleteIndexRequest  deleteIndexRequest = new DeleteIndexRequest(indexName)    ;
//            AcknowledgedResponse delete = highLevelClient.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);
//            System.out.println("----------------删除出索引的信息" + delete.toString());
//            System.out.println("----------------删除出索引的信息" + delete.isAcknowledged());


        }

    @Test
  void   saveToES() throws IOException {
      String   indexName = "juejiu";
       IPage<EssayDto> iPage = new Page<>();
       iPage.setCurrent(1);
       iPage.setSize(100);
        EssayVo essayVo = new EssayVo();
        IPage<EssayDto> page = essayService.getPage(iPage, essayVo);

        BulkRequest bulkRequest = new BulkRequest();

        page.getRecords().forEach(one->{
          IndexRequest indexRequest = new IndexRequest()
                  .source(JSON.toJSONString(one), XContentType.JSON)
                  .index(indexName);
          bulkRequest.add(indexRequest);
      });

      BulkResponse bulkResponse = highLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
      System.out.println("---------bulk的结果"+ (!bulkResponse.hasFailures()));

  }

  @Test
    /***/

  void  searchResult() throws IOException {
      String   indexName = "juejiu";
      SearchRequest searchRequest = new SearchRequest(indexName);
      SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
      Query query = new Query(4,1);
      searchSourceBuilder.from(query.getCurrent());
      searchSourceBuilder.size(query.getSize());

      /***
       * 添加查询条件
       * */



      searchRequest.source(searchSourceBuilder);

      SearchResponse search = highLevelClient.search(searchRequest, RequestOptions.DEFAULT);
      System.out.println(search);
      System.out.println("-----------");
      System.out.println(search.getHits());
      search.getHits().forEach(one->{


          System.out.println("单个的hit"+one.getSourceAsString());
      });




  }

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

java 复制代码
  String   indexName = "juejiu";
        SearchRequest searchRequest = new SearchRequest(indexName);
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        searchSourceBuilder.from(query.getCurrent());
        searchSourceBuilder.size(query.getSize());

        /***
         * 添加查询条件
         * */

        searchRequest.source(searchSourceBuilder);
        SearchResponse search = highLevelClient.search(searchRequest, RequestOptions.DEFAULT);


           /**
            * 暂停原代码  不返回page对象
            *
            * */
//
//        System.out.println("-----------------------------"+query.toString());
//            System.out.println("-----------------------------"+essayVo.toString());
//        IPage<EssayDto> iPage = new Page<>();
//        iPage.setCurrent(query.getCurrent());
//        iPage.setSize(query.getSize());
//        IPage<EssayDto> list = essayService.getPage(iPage,essayVo);
//        HashMap hashMap = new HashMap<>();
//      list.getRecords().stream().map(one -> {
//            Date createTime = one.getCreateTime();
//            String essayTitle = one.getEssayTitle();
//            hashMap.put(createTime, essayTitle);
//            return  null;
//        }).collect(Collectors.toList());
//        System.out.println("----------------------------------------");
//        System.out.println(hashMap);
       IPage<EssayDto> iPage = new Page();
       List<EssayDto> list = new ArrayList<>();
        search.getHits().forEach(one->{
            Map<String, Object> sourceAsMap = one.getSourceAsMap();
            EssayDto essayDto = new EssayDto();
            essayDto.setEssayId((Integer) sourceAsMap.get("essayId"));
            essayDto.setEssayTitle(sourceAsMap.get("essayTitle").toString());
            essayDto.setEssayContext(sourceAsMap.get("essayContext").toString());
            essayDto.setEssayPageViewTimes((Integer) sourceAsMap.get("essayPageViewTimes"));
            essayDto.setCreateTime(Date.from(LocalDateTime.parse(sourceAsMap.get("createTime").toString(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")).atZone(ZoneId.systemDefault()).toInstant()));
            Map<String, Object> userMap = (Map<String, Object>) sourceAsMap.get("user");
            User user = new User();
            user.setId((Integer) userMap.get("id"));
            user.setAccount(userMap.get("account").toString());
            user.setPassword(userMap.get("password").toString());

            user.setAvatar(userMap.get("avatar").toString());
            user.setPhone(userMap.get("phone").toString());
            user.setRealName(userMap.get("realName").toString());
            user.setEmail(userMap.get("email").toString());
            user.setSex((Integer) userMap.get("sex"));
//            user.setBirthday(String.valueOf(Date.parse(userMap.get("birthday").toString())));
            essayDto.setUser(user);
            Map<String, Object> tagMap = (Map<String, Object>) sourceAsMap.get("tag");
            Tag tag = new Tag();
            tag.setTagId((Integer) tagMap.get("tagId"));
            tag.setTagName(tagMap.get("tagName").toString());
            essayDto.setTag(tag);
            essayDto.setUserId((Integer) sourceAsMap.get("userId"));
            essayDto.setEssayPageViewTimes((Integer) sourceAsMap.get("essayPageViewTimes"));
            essayDto.setCreateTime(Date.from(LocalDateTime.parse(sourceAsMap.get("createTime").toString(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")).atZone(ZoneId.systemDefault()).toInstant()));
            essayDto.setEssayId((Integer) sourceAsMap.get("essayId"));
            essayDto.setUser(user);
            essayDto.setTag(tag);
            list.add(essayDto);
        });
        iPage.setRecords(list);
        iPage.setCurrent(query.getCurrent());
        iPage.setSize(query.getSize());

        return Result.SUCCESS(iPage);

单体的es 实现easy

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

相关推荐
智海观潮11 小时前
Unity Catalog与Apache Iceberg如何重塑Data+AI时代的企业数据架构
大数据·人工智能·ai·iceberg·catalog
柏峰电子12 小时前
市政道路积水监测系统:守护城市雨天出行安全的 “智慧防线”
大数据·人工智能·安全
威斯软科的老司机13 小时前
AR远程协作系统设计:虚实融合场景下的设备维护操作指引界面
大数据·ar·可视化
缘友一世15 小时前
Agent常用搜索引擎Tavily使用学习
学习·搜索引擎·agent
陆水A17 小时前
数仓主题域划分
大数据·数据仓库·数据库开发·etl·etl工程师
道一云黑板报17 小时前
Spark初探:揭秘速度优势与生态融合实践
大数据·分布式·spark·流式处理
字节跳动数据平台17 小时前
火山引擎多模态数据湖:AI时代的数据湖如何挖掘图片、视频、语音的“富矿”?
大数据
野生技术架构师18 小时前
系统改造:一次系统领域拆分的实战复盘
java·大数据·开发语言
极限实验室19 小时前
INFINI Labs 产品更新 - Coco AI v0.7.0 发布 - 全新的文件搜索体验与全屏化的集成功能
数据库·搜索引擎·产品
时序数据说19 小时前
分布式时序数据库的特点解析
大数据·数据库·分布式·物联网·时序数据库·iotdb