Elasticsearch入门案例以及Kibana数据可视化使用教程

Elasticsearch入门案例以及Kibana数据可视化使用教程,第1张

Elasticsearch入门案例以及Kibana数据可视化使用教程 一、Elasticsearch入门 maven依赖

   org.springframework.boot
   spring-boot-starter-data-elasticsearch
yml配置:
spring:
  data:
    elasticsearch:
      elasticsearch:
        cluster-nodes: localhost:9200
        cluster-name: my-es
1.创建实体Bean对象

在Elasticsearch 6.X 版本中,不建议使用type,而且在7.X版本中将会彻底废弃type,所以此处我只指定了indexName,没有指定type。这里,一个journal代表一期彩票,同时代表一条索引记录。

类比关系型数据库的话,Index相当于表,document相当于记录

package com.yl.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.data.elasticsearch.annotations.document;

import java.time.LocalDateTime;
import java.util.List;


@TableName("sys_journal")
@Data
@document(indexName = "journal")        //es索引,索引名必须小写
public class Journal {

    private Long id;

    private String title;   //标题

    private String titleDesc;       //标题全本

    private String issue;       //期号 唯一

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
    private LocalDateTime date;     //期刊日期 yyyy-MM-dd

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
    private LocalDateTime dateStr;     //期刊日期字符串格式

    private String url;     //版面地址

    private String stageDesc;       //版面备注

    private Integer type;       //期刊类型:.1:中国体彩报 2.其他

    private Integer status;     //状态:1.正常 2.删除

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
    private LocalDateTime grabDate; //抓取时间 yyyy-MM-dd HH:mm:ss

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
    private LocalDateTime createdAt;       //创建时间 yyyy-MM-dd HH:mm:ss

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
    private LocalDateTime updatedAt;        //更新时间 yyyy-MM-dd HH:mm:ss


    @TableField(exist = false)
   private List journalPages;



}
 2.然后,需要自己定义一个接口,并继承ElasticsearchRepository
package com.yl.repository;

import com.yl.entity.Journal;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;


public interface JournalRepository extends ElasticsearchRepository {
}
3.接下来,定义service接口
package com.yl.service;



import com.alibaba.fastjson.JSONObject;
import com.yl.entity.BlogModel;
import org.springframework.data.domain.Page;
import org.springframework.data.elasticsearch.annotations.Query;


import java.util.List;
import java.util.Optional;


public interface JournalService {
    long count();

    Journal save(Journal journal);

    void delete(Journal journal);

    Iterable findAll();

    List findByTitle(String name);

    Page pageQuery(JSonObject param);

    Optional findById(String id);

    void deleteById(String id);

    Page findAll(Integer pageIndex, Integer pageSize);

    //自定义方法
    List findByTitleLike(String keyword);

    //自定义方法
    List findByTitleCustom(String keyword);

}
package com.yl.service.impl;


import com.alibaba.fastjson.JSONObject;
import com.yl.repository.JournalRepository;
import com.yl.entity.Journal;
import com.yl.service.JournalService;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;


@Service
public class JournalServiceImpl implements JournalService {
    @Autowired
    private JournalRepository journalRepository;

    @Autowired
    ElasticsearchRestTemplate elasticsearchRestTemplate;

    
    @Override
    public long count() {
        return  journalRepository.count();
    }

    
    @Override
    public Journal save(Journal journal) {
        return journalRepository.save(journal);
    }

    
    @Override
    public void delete(Journal journal) {
        journalRepository.delete(journal);
    }

    
    @Override
    public Optional findById(String id) {
        return journalRepository.findById(id);
    }

    
    @Override
    public void deleteById(String id) {
        journalRepository.deleteById(id);
    }

    
    @Override
    public Iterable findAll() {
        return journalRepository.findAll();
    }

    
    @Override
    public List findByTitle(String title) {
        List list = new ArrayList<>();
        MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("title", title);
        Iterable iterable =journalRepository.search(matchQueryBuilder);
        iterable.forEach(e->list.add(e));
        return list;
    }

    
    @Override
    public Page pageQuery(JSonObject param) {
        String indexName = param.getString("indexName");
        Integer page = param.getInteger("page");
        Integer size = param.getInteger("size");

        NativeSearchQuery searchQuery=new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.matchPhraseQuery("title", indexName))
                .withPageable(PageRequest.of(page, size))
                .build();
        return journalRepository.search(searchQuery);
    }

    
    @Override
    public List findByTitleLike(String keyword) {
        return journalRepository.findByTitleLike(keyword);
    }


    
    @Override
    public List findByTitleCustom(String keyword) {
        return journalRepository.findByTitleCustom(keyword);
    }

    
   @Override
    public Page findAll(Integer pageIndex, Integer pageSize) {
        Page page = journalRepository.findAll(PageRequest.of(pageIndex, pageSize));
        return page;
    }
}
4.控制层
package com.yl.controller;

import com.alibaba.fastjson.JSONObject;
import com.yl.repository.JournalRepository;
import com.yl.common.lang.Result;
import com.yl.entity.BlogModel;
import com.yl.entity.Journal;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;


@RestController
@RequestMapping("/journal")
public class JournalController {
    @Autowired
    private JournalService journalService;

    @GetMapping("/add")
    public Result add(){
        Journal journal = new Journal();
        journal.setUrl("htttp://baidu.com");
        journal.setCreatedAt(LocalDateTime.now());
        journal.setTitle(" 文章与专著 2021-12-10 15:54 GB/T 14467—2021《中国植物分类与代码》国家标准正式出版发行");
        journal.setTitleDesc("中华人民共和国");
        return Result.succ(journalService.save(journal));
    }

    @GetMapping("/findByName")
    public Result findByName(String title){
        List list = new ArrayList<>();
        MatchQueryBuilder matchQueryBuilder = new 
 MatchQueryBuilder("title",title);
        return Result.succ( journalService.search(matchQueryBuilder));
    }

    
    @PostMapping("/page")
    public Result page(@RequestBody JSonObject param){
        return Result.succ(journalService.pageQuery(param));
    }


 
    @GetMapping("/get/{id}")
    public Result getById(@PathVariable String id) {
        if (StringUtils.isEmpty(id))
            return Result.fail("id为null");
        Optional blogModelOptional = journalService.findById(id);
        if (blogModelOptional.isPresent()) {
            Journal blogModel = blogModelOptional.get();
            return Result.succ(blogModel);
        }
        return Result.fail("未查询到相关数据");
    }

    
    @GetMapping("/findAll")
    public Result findAll() {
        Iterable iterable = journalService.findAll();
        List list = new ArrayList<>();
        iterable.forEach(list::add);
        return Result.succ(list);
    }

    
    @PostMapping("/updateById")
    public Result updateById(@RequestBody Journal journal) {
        String id = journal.getId();
        if (StringUtils.isEmpty(id)) {
            return Result.fail("");
        }
        return Result.succ(journalService.save(journal));
    }

    
    @GetMapping("/deleteById/{id}")
    public Result deleteById(@PathVariable String id) {
        if (StringUtils.isEmpty(id)) {
            return Result.fail("id为null");
        }
        journalService.deleteById(id);
        return Result.succ("删除成功");
    }
}
注意:指定数据类型就在bean对象对应字段添加类型限定注解@Field(type = FieldType.Long) 添加的数据

二、查看Elasticsearch中添加的索引数据 1查看添加的索引数据

 打开折叠框,选择Stack_management

2.点击Index Patterns,然后选择Create Index Patterns

 3.输入你需要看的索引名字,点击Create Index Pattern

 4.点击折叠框,选DisCover

 5.选择这个折叠框就可以自由切换了 三、删除索引 1. 打开折叠框,选择Stack_management

2.选中Save Objects,x选中要删除的索引名,删除

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5680959.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存