ElasticSearch简介
Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene™ 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下工作:
- 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索
- 实时分析的分布式搜索引擎
- 可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据
基本概念
Elasticsearch是面向文档型数据库,一条数据在这里就是一个文档,用JSON作为文档序列化的格式.例如:
{
"name" : "John",
"sex" : "Male",
"age" : 25
}
Elasticsearch和关系型数据术语对照表:
关系数据库 => 数据库 => 表 => 行 => 列(Columns)
Elasticsearch => 索引(Index) => 类型(type) => 文档(Docments) => 字段(Fields)
一个 Elasticsearch 集群可以包含多个索引(数据库),也就是说其中包含了很多类型(表)。这些类型中包含了很多的文档(行),然后每个文档中又包含了很多的字段(列).
Elasticsearch的交互,可以使用Java API,也可以直接使用HTTP的Restful API方式.
索引
Elasticsearch最关键的就是提供强大的索引能力,其精髓一切设计都是为了提高搜索的性能
但是为了提高搜索的性能,难免会牺牲某些其他方面,比如插入/更新,否则其他数据库不用混了,例如插入一条记录,其实就是直接PUT一个json的对象,这个对象有多个fields,比如上面例子中的name, sex, age,那么在插入这些数据到Elasticsearch的同时,Elasticsearch还默默的为这些字段建立索引–倒排索引,因为Elasticsearch最核心功能是搜索。
Elasticsearch是如何做到快速索引的
我们知道大多数的关系型数据库采用的索引类型为B Tree\B+ Tree,而Elasticsearch使用的是倒排索引,那么为什么倒排索引比其他数据库的索引要快呢?
传统关系型数据库采用了B Tree/B+Tree这样的数据结构,为了提高查询的效率,减少磁盘寻道次数,将多个值作为一个数组通过连续区间存放,一次寻道读取多个数据,同时也降低树的高度,Elasticsearch也是采用同样的思路,直接通过内存查找区间(term),不读磁盘,但是如果term太多,term dictionary也会很大,放内存不现实,于是有了Term Index,就像字典里的索引页一样,A开头的有哪些term,分别在哪页,可以理解term index是一颗树,因此Elasticsearch的索引效率要更快一些。
总结和思考
Elasticsearch的索引思路:
将磁盘里的东西尽量搬进内存,减少磁盘随机读取次数,结合压缩算法,用及其苛刻的态度使用内存。
使用Elasticsearch进行索引时需要注意:
- 不需要索引的字段,一定要明确定义出来,因为默认是自动建索引的
- 对于String类型的字段,不需要分析的也需要明确定义出来,因为默认也是会分析的
- 选择有规律的ID很重要,随机性太大的ID(EQ:java的UUID)不利于查询
ElasticSearch安装教程
下载并安装Elasticsearch服务
1)安装Java JDK:在安装Elasticsearch引擎之前,必须安装ES需要的软件环境,安装Java JDK和配置JAVA_HOME环境变量
- Elasticsearch5.0以上版本需要安装jdk1.8
- 其他版本安装jdk1.7即可
2)官方下载中心:ElasticSearch Download,下载压缩包并解压到安装路径
3)开启ElasticSearch 服务:进入E:\elasticsearch-6.3.2\bin
目录,双击执行 elasticsearch.bat
,该脚本文件执行 ElasticSearch 安装程序,稍等片刻,打开浏览器,输入 http://localhost:9200
,显式以下信息,说明ES安装成功。
4) 安装Elasticsearch head插件
为了便于管理ES,本文使用head插件,这是最初级的管理工具,在浏览器中显示ES集群,索引等信息,十分好用
4.1) 安装Elasticsearch head:
下载地址:elasticsearch-head,下载完毕后解压到任意路径上,别放在elasticsearch安装路径上
4.2)安装node.js:
下载地址:node.js
4.3)安装grunt:
运行head需要借助grunt命令,因此需要安装grunt
打开cmd,跳转到node.js
安装目录的根目录,执行指令 npm install -g grunt -cli
进行安装grunt
4.4)安装pathomjs:
打开cmd,跳转到head目录,执行命令:npm install
进行安装pathomjs
4.5)运行head:
运行命令 grunt server
,启动head服务(默认端口号是9100)
用head访问elasticsearch浏览器访问: http://localhost:9100
注意这里的端口使用的是head端口
至此,我们就结束了Elasticsearch的简介及安装教程。