Elasticsearch基础环境配置和使用

原文地址:https://www.cnblogs.com/imdeveloper/p/12815034.html

介绍

  1. 和传统数据库的结构对应关系
数据库
索引 类型 文档 字段
  1. ES分布式搜索,传统数据库遍历式搜索
    允许水平分割、扩展内容容量
    允许在分片之上进行分布式的、并行的操作,进而提高性能、吞吐量
    分片的分布,它的文档怎样聚合回搜索请求,完全由Elasticsearch管理
  2. ES采用倒排索引,传统数据库采用B+树索引
    从单词角度看文档,标识每个单词分别在那些文档中出现(文档ID),以及在各自的文档中每个单词分别出现了多少次(词频)及其出现位置(相对于该文档首部的偏移量)
  3. ES免费,完全开源
  4. 海量数据的查询,比传统数据库快
  5. ES天生对Json数据支持的非常完美,只要是标准的Json结构的数据,无论多么复杂,无论是嵌套多少层,都能存储到ES里面,进而能够查询和分析,检索。
  6. ES没有用户验证和权限控制
  7. ES没有事务的概念,不支持回滚,误删不能恢复
  8. 写到磁盘的倒序索引是不变的(想让新修改过的文档可以被搜索到,必须重新构建整个索引)

基础环境

  • 安装JDK 1.8或者更高版本
  • 安装Elasticsearch(建议使用6.0以下的版本,高版本坑太多。比如可以选择5.6.9版本)

相关资源文件

Springboot中使用Elasticsearch

Springboot 有一个 Spring Data 组件,可以用来连接各种数据源。用来连接 Elasticsearch 的是Spring-Data-Elasticsearch。(个人拙见,其接口设计的并不十分友好,很多方法都没有返回值信息(2020/1/17)

Spring-Data-Elasticsearch更比较慢,其最高版本可能无法支持Elasticsearch的最新版本。经实测,Elasticsearch 5.6.9 + Springboot 2.2.1.RELEASE + spring-boot-starter-data-elasticsearch可以正常运行。

相关maven依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>    

关键注意点

  1. 相比1.x的版本,最新版的spring-boot-starter-data-elasticsearch去掉了很多接口,此外很多方法都有改动。(网上很多博客是基于1.x版本的,所以找资料时要注意这个问题)
  2. 实体类要增加@Document注解,说明要连接到Elasticsearch的哪个索引和哪个类型上
@Document(indexName = "lego", type = "person")
  1. 实体类一定要要有id字段
    可以用@Id标记一个字段作为id主键
  2. DAO继承ElasticsearchRepository
public interface PersonDAO extends ElasticsearchRepository<Person, Integer> {
}
  1. 控制类:在Controller引用DAO层的方法(部分)
// 根据id获取一条信息(此前的方法是findOne,较新版本的Spring Data改成了findById)
Optional<Person> person = personDAO.findById(id);
// 插入、更新信息
personDAO.save(person);
// 删除一条记录
personDAO.delete(personDAO.findById(id).get());
// 清空所有
personDAO.deleteAll();

// 分页查询
// 构建查询
QueryStringQueryBuilder builder = new QueryStringQueryBuilder(key);
QueryBuilder query = QueryBuilders.boolQuery().must(builder);
// 分页、排序
Sort sort = new Sort(Sort.Direction.DESC, "id");
// 此方法与旧版本用法不同
Pageable pageable = PageRequest.of(index, size, sort);
// 查找
Iterable<Person> searchResult = personDAO.search(query, pageable);
  1. application配置
spring.data.elasticsearch.cluster-name=elasticsearch
spring.data.elasticsearch.cluster-nodes=localhost:9300

相关链接

  1. Springboot操作Elasticsearch的demo:https://github.com/letbingo/springboot_demo/tree/master/spring boot-elasticsearch
  2. ElasticSearch分析工具-Kibana介绍:https://www.cnblogs.com/imdeveloper/articles/12823384.html
  3. Spring Data Elasticsearch官方文档:https://docs.spring.io/spring-data/elasticsearch/docs/3.2.4.RELEASE/reference/html/#new-features
  4. Windows环境下Elasticsearch安装教程:https://www.cnblogs.com/hualess/p/11540477.html
posted @ 2020-05-01 21:58  letbingo  阅读(322)  评论(0编辑  收藏  举报