es入门篇

最近在项目中因为应用到es,所以打算学es致用
当一张表中的数据量是千万级别以后,那么无论它是如何来拆分都对它的性能没有多大的提升,这个时候es就起到作用了,es会在每个字段上面都建立一个索引,用来提升查询效率
这篇博客我是采用spring-boot-starter-data-elasticsearch来实现的
在原来的基础之上导入spring-data-elasticsearch包依赖:

<!--es中的依赖包-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>

在配置文件标明es数据库中地址以及端口号

#es数据库中的配置位置
  elasticsearch:
    rest:
      uris: http://localhost:9200

自定义一个document,这个document中可以有自定义的字段

/**
 * index:索引可以理解为数据库 database其中名称必须要以indexName来称呼
 *document:简单的理解为mysql关系型数据库中的表
 */

@Document(indexName = "article")
@Data
public class Article {
     

    @Id
    private String id;
    private String title;
    private String content;
    private Integer userId;
    private Integer createTime;
}

自定义一个能够操作es数据中的接口

这个接口必须要继承elasticsearchRepository这个类
 */

@Repository
public interface ArticleRepository  extends ElasticsearchRepository<Article, String> {
     

在自定义的controller层中实现对es数据中的操作
esController

/**
     * 对文章类中的内容进行校验
      增操作
     * @param article
     * @return
     */
    @PostMapping("saveToEs")
    public String save(@RequestBody Article article){
     
        //数据新增或者是更新
        String result = verifySaveForm(article);
        if (!StringUtils.isEmpty(result)){
     
            return "文章中的字段有一些是null值";
        }
        
        if (StringUtils.isEmpty(article.getId())){
     
            article.setCreateTime(12);
        }
        
        //将文章存储进仓库中去,注意点就是es在存储数据时,它的返回值是存储的document
        Article a = articleRespository.save(article);

        return "es中的数据已经保存成功";
    }


    /**
         * 根据id来删除数据(这个方法是接口中自定义的删除方法,可以在此基础之上自定义一个操作方法)
         * @param id
         * @return
         */
        @DeleteMapping("remove/{id}")
        public String delete(@PathVariable String id){
     
            //根据id删除
            articleRespository.deleteById(id);
            return "es中的数据已经删除";

        }


	/**
     * 查询出所有的数据(也是接口中的固定死的方法)
     * @return
     */
    @RequestMapping(value = "queryAllData")
    public  String queryAll(){
     
        Iterable<Article> all = articleRespository.findAll();
        Iterator<Article> iterator = all.iterator();
        while(iterator.hasNext()){
     
            Article next = iterator.next();
            log.info("------------->查询出的文章数据为:{}", next);
        }
        return "查询出所有的数据结果";
    }


	/**
     * 对es中的数据进行分页查询
     * @param currentPage
     * @param limit
     * @return
     */
    @GetMapping("list")
    public String list(@RequestParam  Integer currentPage,  @RequestParam Integer limit){
     
        if (currentPage == null || currentPage < 0 || limit == null || limit <= 0){
     
            return "请输入合法的分页参数";
        }

        //分页列表查询
        //这里采用ElasticSearchRestTemplate或ElasticsearchOperations来进行分页
        NativeSearchQuery query = new NativeSearchQuery(new BoolQueryBuilder());
        query.setPageable(PageRequest.of(currentPage, limit));

        //方法一:
        SearchHits<Article> searchHits = elasticsearchRestTemplate.search(query, Article.class);

        //方法二:
//        SearchHits<Article> search = elasticsearchOperations.search(query, Article.class);

        List<Article> articles = searchHits.getSearchHits().stream().map(SearchHit::getContent).collect(Collectors.toList());

        //将数据存储进map中去
        Map<String, Object> map = new HashMap<>();
        map.put("count", searchHits.getTotalHits());
        map.put("articles", articles);
        return JSON.toJSONString(map);
    }

https://elasticsearchjava-api.readthedocs.io/en/latest/index.html es上面的中文文档

你可能感兴趣的:(es知识点)