Elasticsearch入门
elaticsearch搜索引擎
简介
ElasticSearch是一个基于Lucene的搜索服务器。
它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。
Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。
设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便
官网
https://www.elastic.co
其它搜索引擎
solr
一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果
sphinx
一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索
关系型数据库搜索缺点
1. 无法打分、排序
2. 无分布式
3. 无法解析复杂搜索请求
4. 效率低
5. 无法分词
搜素引擎需要解决的问题
1. 搜索解决方案要高效
2. 搜素引擎零配置和完全免费
3. 能简单的通过json和http与搜索引擎交互
4. 搜素服务器稳定
5. 易扩展
安装使用Elasticsearch
安装elasticsearch-rtf(针对中文搜索集成了相关插件)
下载并运行
1 https://github.com/medcl/elasticsearch-rtf
head插件和kibana安装
elasticsearch-head是一个elasticsearch的集群管理工具
包管理工具部署
https://www.cnblogs.com/yominhi/p/7039795.html # 下面使用到npm安装下载包的时候,都替换成cnpm,提升下载速度
下载并运行
1 https://github.com/mobz/elasticsearch-head
第一次运行,插件会提示未连接,这涉及到elasticsearch的安全策略,默认不运行第三发库连接
配置安全策略文件,编辑elasticsearch.yml
# 追加下面内容 http.cors.enabled: true http.cors.allow-origin: "*" http.cors.allow-methods: OPTIONS, HEAD, PUT, GET, POST,DELETE http.cors.allow-headers: "X-Requested-With, Content-Type, Content-Length, X-User"
重启elasticsearch,并刷新head页面就能连接了
kibana-sense安装
注意
Sense是一个Kibana应用程序,要想启动和运行,首先需要下载Kibana,并按照这里的指示安装
kibana的版本需要和elasticsearch-rtf使用版本一致,可以在head管理页面中,点击信息查看版本号
下载地址
1 https://www.elastic.co/downloads/past-releases
运行kibana
进入软件包的bin目录下,执行kibana.bat文件,发现程序监听在5601端口,我们打开并访问
点击导航栏的Dev Tools
点击执行命令按钮,进行初始化
以后关于es的操作都是在这里的console进行
elasticsearch概念
索引(index)
文档容器
关系型数据库中的数据库(DataBase),等价于ES中的索引(Index)
类型(type)
类型是索引内部的逻辑分区,用来预定义文档的域
一个数据库下面有N张表(Table),等价于1个索引Index下面有N多类型(Type)
文档(document)
文档是Lucene搜索的原子单位,它包含一个或多个域。
一个数据库表(Table)下的数据由多行(ROW)多列(column,属性)组成, 等价于1个Type由多个文档(Document)组成, 每个文档有多个Field
映射(mapping)
原始内容存储为文档之前需要事先进行分析,如分词、过滤、内容排序等。
在一个关系型数据库里面,schema定义了表、每个表的字段,还有表和字段之间的关系。
与之对应的,在ES中:Mapping定义索引下的Type的字段处理规则,即索引如何建立、索引类型、是否保存原始索引JSON文档、是否压缩原始JSON文档、是否需要分词处理、如何进行分词处理等。
cluster
代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。
es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。
node
一个节点是集群中的一个服务器,由一个名字来标识,默认是一个随机的漫画角色的名字
shards
代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。
分片的数量只能在索引创建前指定,并且索引创建后不能更改。
replicas
代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。
二是提高es的查询效率,es会自动对搜索请求进行负载均衡。
recovery
代表数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。
river
代表es的一个数据源,也是其它存储方式(如:数据库)同步数据到es的一个方法。
它是以插件方式存在的一个es服务,通过读取river中的数据并把它索引到es中,官方的river有couchDB的,RabbitMQ的,Twitter的,Wikipedia的。
gateway
代表es索引快照的存储方式,es默认是先把索引存放到内存中,当内存满了时再持久化到本地硬盘。
gateway对索引快照进行存储,当这个es集群关闭再重新启动时就会从gateway中读取索引备份数据。
es支持多种类型的gateway,有本地文件系统(默认),分布式文件系统,Hadoop的HDFS和amazon的s3云存储服务。
discovery.zen
代表es的自动发现节点机制,es是一个基于p2p的系统,它先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,同时也支持点对点的交互。
Transport
代表es内部节点或集群与客户端的交互方式,默认内部是使用tcp协议进行交互,同时它支持http协议(json格式)、thrift、servlet、memcached、zeroMQ等的传输协议(通过插件方式集成)。