Elasticsearch使用(Windows)

Elasticsearch介绍
Elasticsearch,简称ES(全文搜索服务器),既可以作为NoSQL数据库,存储任意格式的文档和数据,同时,也可以作为大数据的分析。作为一个跨界开源产品。ES有如下特点:

  • 全文搜索引擎,ES是建立在Lucene上的开源搜索引擎,使用ES可以进行全文搜索、地理信息搜索,像GitHub、StackOverFlow这样的网站也在使用ES,足见其性能。
  • 文档存储和查询,可以像NoSQL那样存储任意格式文档,并能根据条件查询文档。
  • 大数据分析,ES可以准确实时地进行大数据分析,数据量从TB到PB皆可胜任,很多国内外的公司都采用ES来做大数据分析。
  • ES同时提供REST API,用来简化对ES的操作。因此可以使用任何语言的客户端,同时也提供Java API,SpringBoot也更是对REST API进行了封装,从而简化了很多开发。
  • ES常常配合传统型数据库一同使用。来完成大数据的查询、搜索和数据分析。

安装Elasticsearch

  • 首先要有JDK环境,确保JDK8及以上版本
  • 访问地址[(https://www.elastic.co/downloads)], 下载最新版本的ES,选择Elasticsearch进行下载即可。
  • 直接解压到某个目录
  • 进入下载文件的bin目录运行elasticsearch.bat
  • 看到以下提示则说明启动成功:
    在这里插入图片描述
    **9200端口是对外的RESTFul接口,而9300端口是ES内部使用的端口。
    -打开浏览器访问:http://localhost:9200 出现以下输出:
    Elasticsearch使用(Windows)_第1张图片
    其中:
    name: 表示这台ES服务器的名字,可以配置
    cluster_name: 默认是elasticsearch。
    ES的集群方式是通过广播在同一个网络中寻找cluster_name一样的ES,cluster_name一样的ES,cluster_name对应的名字是同一个集群的标记。

Elasticsearch的基本概念

  • Index: Index是文档(Document)的集合,Index下面包含了Type,用于对Document进一步分类。可以理解为ES中的Index相当于数据库,而Type相当于数据库中的表,ES中可以轻易地联合Index和Type来搜索数据,而数据库做不到这一点。
  • Type: 用来进一步组织Document,一个Index下可以有多个Type,例如用户信息是一个Type,用户的支付记录也是一个Type。
  • Document: 文档是ES能够存储和搜索的基本信息,类似数据库表行数据,Document为JSON格式,文档属于Type。
  • Node(结点): 节点是集群里一台ES Server,用于文档的存储和查询。应用可以只有一个节点,也可以由上百个节点组成集群来存储和搜索数据。每个节点都有一个名字,以及所属集群的名字。
  • 集群: 同样集群名的节点将组合为ES集群,用来联合完成数据的存储和搜索。默认集群名字是Elasticsearch。
  • 分区(Shards)和复制(Replicas): 每个Index理论上都可以包含大量的数据,超过单个节点的存储限制,将明显限制存储和搜索的性能。因此,ES会将Index在物理上分为多个分区,而且这些分区会按照配置复制到多个节点,Index的分区称为主分区,复制的分区称为复制分区。这样做,既保证了数据安全性又提高了查询性能。

Spring Data Elastic
Spring Data Elastic是Spring官方提供的访问ES的方式,相对于REST访问,更具有优势:

  • 完善的封装,遵循Spring Data的规范,只要会使用Spring Data,例如Spring Data JPA,就可以使用Elastic Data。
  • 屏蔽了ES REST接口的复杂性,就像调用普通方法一样调用Elastic Data,Spring会自动调用Elastic底层API来完成查询。
  1. 首先对于SpringBoot来说,要添加以下依赖:


    org.elasticsearch
    elasticsearch
    6.7.1


  1. Spring Boot的application.yml配置ES的访问地址
spring:
  data:
    elasticsearch:
      cluster-nodes: 127.0.0.1:9300
  1. 编写Entity
@Data
@Document(indexName = "product",type="book")
public class BookEntity {
    @Id
    private String id;
    private String name;
    private String message;
    private Date postDate;
    private String type;
}
//其中,@Document表示这是一个Elastic Data,indexName和type对应于
//Elasticsearch的Index和Type。本例中的索引是product,类型是book。
  1. 编写Dao
public interface BookDao extends CrudRepository {
    public List getByMessage(String key);
}
//该接口继承了CrudRepository,再继续添加一个getByMessage方法,
//这是一个标准Spring Data命名,意味着Elastic Data会查询message字段。
  1. 编写Controller
@RestController
public class RestController {

    @Autowired
    private BookDao bookDao;

    @RequestMapping("/springdata/book/{id}")
    public BookEntity getBookById(@PathVariable String id){
        //测试内置的findById
        Optional optional=bookDao.findById(id);
        BookEntity bookEntity=optional.get();
        return bookEntity;
    }

    @RequestMapping("/springdata/search/{key}")
    public List search(@PathVariable String key){
        //测试全文搜索
        List list=bookDao.getByMessage(key);
        return list;
    }

    @RequestMapping("/springdata/search/{key}/{page}")
    public List search(@PathVariable int page,@PathVariable String key){
        int numberOfPage=5;
        PageRequest pageRequest= PageRequest.of(page,numberOfPage);
        //全文搜索翻页
        Page pages=bookDao.getByMessage(key,pageRequest);

        long total=pages.getTotalElements();
        long totalPage=pages.getTotalPages();

        List list=pages.getContent();
        return  list;
    }
}

你可能感兴趣的:(ElasticSearch)