简介
ElasticSearch是一个基于Lucene开发的搜索服务器,具有分布式多用户的能力,ElasticSearch是用Java开发的开源项目,基于Restful Web接口,能够达到实时搜索、稳定、可靠、快速、高性能、安装使用方便,同时它的横向扩展能力非常强,不需要重启服务。ElasticSearch是一个非常好用的实时分布式搜索和分析引擎,可以帮助我们快速的处理大规模数据,也可以用于全文检索,结构化搜索以及分析等。目前很多网站都在使用ElasticSearch进行全文检索,例如:GitHub、StackOverflow、Wiki等。ElasticSearch式建立在全文检索引擎Lucene基础上的,而Lucene是最先进、高效的开元搜索引擎框架,但是Lucene只是一个框架,要充分利用它的功能,需要很高的学习成本,而ElasticSearch使用Lucene作为内部引擎,在其基础上封装了功能强大的Restful API,让开发人员可以在不需要了解背后复杂的逻辑,即可实现比较高效的搜索。
倒排索引(Inverted Index)
关系型数据库为了提高查询效率会添加索引,比如MySQL就是B-Tree索引(B+树),还有文件系统也是采用B+树。搜索引擎的基础数据结构倒排索引(Inverted Index)。在平时,会经常使用各种各样的索引,如根据链接,可以找到链接里的具体文本,这就是索引。反过来,如果,如果我们能根据具体文本,找到文本存在的具体链接,这就是倒排索引,可简单理解为从文本到链接的映射。平时在使用Google、百度时,就是根据具体文本去找链接,这就是以倒排索引为基础的。ElasticSearch也是使用的是倒排索引(Inverted Index),也是为了提高查询速度。
应用案例
- GitHub searches 20TB of data using Elasticsearch, including 1.3 billion files and 130 billion lines of code.
- Foursquare:”实时搜索5千万地理位置信息”
- SoundCloud使用ElasticSearch为1.8亿用户提供即时而精准的音乐搜索服务
- Elasticsearch使Fog Creek可以在400亿行代码中进行一个月3千万次的查询
特点
- Open Source(开源)
- Apache Lucene(基于 Lucene)
- Schema Free(模式自由)
- Document Oriented(面向文档型的设计)
- Real Time Data & Analytics(实时索引数据)
- Distributed(分布式)
- High Availability(高可靠性)
- 其他特性:RESTful API;JSON format;multi-tenancy;full text search;conflict management;per-operation persistence
基本概念
Gateway:代表ElasticSearch索引快照的存储方式,ElasticSearch默认是先把索引存放到内存中,当内存满了时再持久化(Persist)到本地硬盘。gateway对索引快照进行存储,当这个ElasticSearch集群关闭再重新启动时就会从gateway中读取索引备份数据。ElasticSearch支持多种类型的gateway,有本地文件系统(默认),分布式文件系统,Hadoop的HDFS和Amazon的s3云存储服务。
安装
输入如下命令下载ElasticSearch:
1 | curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.1.1.tar.gz |
-L参数表示–location,因为有些下载链接有重定向操作,L操作告诉curl如果返回的是重定向30X,那么就直接再次发起请求,请求重定向到的网址。O参数表示output,–remote-name,表示写入到本地磁盘的文件名称和远程文件名称(remote name)一样。下载完毕后,将文件拷贝到需要安装的目录下:
1 | mv elasticsearch-5.1.1.tar.gz /opt/local/tools/ |
将文件解压:
1 | tar -xzvf elasticsearch-5.1.1.tar.gz |
启动ElasticSearch:
1 | ./elasticsearch -d |
输入如下命令判断是否安装成功:
1 | curl http://localhost:9200/?pretty |
返回内容为:
1 | { |
安装插件
Head插件
ElasticSearch从版本5+即不支持site plugin(site plugins are not supported). Run elasticsearch-head as a standalone server。安装Grunt:
1 | sudo npm install -g grunt-cli |
Grunt安装完毕后,接着安装elasticsearch-head:
1 | git clone git://github.com/mobz/elasticsearch-head.git |
安装完毕后,访问地址:http://localhost:9100/
。由于有同源策略,暂时还无法连接。
1 | XMLHttpRequest cannot load http://localhost:9200/_cluster/state. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:9100' is therefore not allowed access. |
在ElasticSearch配置文件中(/opt/local/tools/elasticsearch-5.1.1/config/elasticsearch.yml
)添加如下配置:
1 | http.cors.enabled: true |
最后成功连接集群,如下图所示: