前言
由于最近在项目中接触使用到了 Elasticsearch, 从本篇博客开始将给大家分享这款风靡全球的产品. 将涉及到 Elasticsearch 的安装, 基础概念, 基本用法, 高级查询, 中文分词器, 与 SpringBoot 集成进行接口开发等相关知识.
Elasticsearch 简述
如果大家接触过大数据的话, 相信大家或多或少的听说过 ELK.ELK 是目前非常主流的用于网站监控, 流量监控, 日志监控, 集中日志管理的一套解决方案. 而 Elasticsearch 如同 ELK 的心脏一般, 起到一个非常核心的作用. 简单来说, Logstash 通过把日志收集到 Elasticsearch 中, 进行储存, kibana 负责可视化的展现结果.
ELK
说白了, Elasticsearch 就是一款大数据搜索引擎, 那么在市面上还有哪些类似的产品呢? 在 Java 开源界的话, 主要就是 Lucene,Solr 和 Elasticsearch 了.
Lucene,Java 领域的搜索引擎鼻祖, 是一个比较底层的东西, 需要深厚的搜索理论基础才可以掌握, 比较复杂 (它本身不是一个完整的解决方案, 需要额外的开发工作). 因此, 为了方便使用, 屏蔽复杂性, Solr 和 Elasticsearch 在 lucene 的基础上进行了二次开发.
Solr 相比 Elasticsearch 而言拥有更加成熟的社区, 比较稳定, 但是随着数据量越来越大, 对实时性要求越来越高, Solr 的搜索效率在下降, 而 Elasticsearch 却没有明显的变化. 因此 Elasticsearch 非常适合实时搜索的应用.(比如大名鼎鼎的 GitHub 的站内实时搜索就在应用 ES)
另外, 由于 Elasticsearch 提供了简单易用的 Restful API, 轻松的横向扩展机制 (说白了, 可以通过加机器来扩展容量), 能支持 PB 级别的结构化或非结构化数据处理, 具有强大的分布式储存能力.
Elasticsearch 的安装
安装比较简单, 下载地址是:
https://www.elastic.co/cn/downloads/elasticsearch
下载后直接解压, 运行即可.
运行 es
默认启动端口 9200
查看 es 启动状态
注意上面的方式是单实例的安装, 那么分布式安装呢?
其实, 对于分布式安装, 无非注意下面几个配置要点:
指明谁是 master, 谁是 slave, 集群的名字, 节点启动的端口 (特别是在同一台机器上模拟分布式).
几个重要的基础概念
索引, 含有相同属性的文档集合.
类型, 索引可以定义一个或者多个类型, 文档必须属于一个类型.
文档, 文档是可以被索引的基本数据单位.
看起来, 比较绕, 我们用类比的思路来理解:
类比理解
索引相当于 database, 类型相当于 table, 文档相当于一条记录, 文档 Document 是 es 里面最小的储存单位. 需要注意的是索引在 es 中的名称必须是英文字母小写且不包含中划线. 和索引相关的有 2 个高级概念, 一个是分片, 一个是备份.
分片: 每个索引都有多个分片, 每个分片是一个 lucene 索引.
备份: 拷贝一个分片就完成了分片的备份.
假设索引的数据很大, 就会造成硬盘的压力很大, 同时搜索速度也会出现瓶颈. 那么可以将索引分成多个分片, 从而分摊压力. 分片的同时, 还可以允许用户进行水平扩展和拆分, 进行分布式的储存, 从而提高搜索的效率.
当一个主分片出现问题时, 备份的分片可以代替工作, 从而提高了 es 的可用性.
es 在默认创建索引时, 会创建 5 个分片, 一个备份.
假设我们的 es 是一个 master,2 个 slave, 创建索引时, 走的默认配置 (5 个分片, 1 个备份), 那么图示如下:
分片和备份
图中标绿颜色的是主分片, 其他是备份的分片.
创建 ES 索引, 类型
本文前面提到 es 提供了简单易用的 Restful API 来操作索引 / 类型 / 文档, 下面介绍下基本格式:
API 基本格式 http://ip:port / 索引 / 类型 / 文档 id
http 常用方法 get/put/post/delete
下面, 我们演示一下利用 postman 来创建一个索引和类型:
创建索引和类型
查询索引, 类型信息
好了, 本篇博客就介绍到这里, 下一篇博客再来给大家介绍文档的增删改查操作等.
来源: http://www.jianshu.com/p/1e5a31c8018c