1.Elasticsearch介绍
1.1.简介
Ealsticsearch是一个基于Lucene的搜索服务器。它提供了一个RESTfull web接口的分布式全文搜索引擎。 Elasticsearch是使用Java语言开发的,并作为Apache许可条款下的开放源代码发布,是一种流行的企业级搜索引擎。 Elasticasearch用于云计算中,能够达到实时的搜索,稳定,可靠,快速,安装使用方便。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是ApacheSolr(也是基于Lucene)。
1.2.总结简介
1、elasticsearch是一个基于Luncene的分布式全文检索服务器
2、elasticsearch隐藏了Lucene的复杂性,对外提供RESTful接口来操作索引、搜索。
es和solr选择哪个?
1、如果正在使用solr可以满足需求就不要更换了。
2、如果你公司准备进行全文检索项目的开发,建议优先考虑es,因为像Github这样大规模的搜索都在用它。
1.3.Lucene->ES的发展
多年前,一个叫做ShayBanon的刚结婚不久的失业开发者,由于妻子要去伦敦学习厨师,他便跟着也去了。在他找工作的过程中,为了给妻子构建一个食谱的搜索引擎,他开始构建一个早期版本的Lucene。
直接基于Lucene工作会比较困难,所以Shay开始抽象Lucene代码以便Java程序员可以在应用中添加搜索功能。他发布了他的第一个开源项目,叫做“Compass”。
后来Shay找到一份工作,这份工作处在高性能和内存数据网格的分布式环境中,因此高性能的、实时的、分布式的搜索引擎也是理所当然需要的。然后他决定重写Compass库使其成为一个独立的服务叫做Elasticsearch。
第一个公开版本出现在2010年2月,在那之后Elasticsearch已经成为Github上最受欢迎的项目之一,代码贡献者超过300人。一家主营Elasticsearch的公司就此成立,他们一边提供商业支持一边开发新功能,不过Elasticsearch将永远开源且对所有人可用。
1.4.原理与应用
1.4.1.索引结构
下图是ElasticSearch的索引结构,右边黑蓝色色部分是原始文档,左边黄色部分是逻辑结构,逻辑结构也是为了更好的去描述ElasticSearch的工作原理及去使用物理结构中的索引文件。
1.4.2.正排、倒排索引
1、正排索引:查字典从第一页开始找,知道找到所在位置(文档–>关键字)
2、倒排/反向索引:查字典时通过目录查询(关键字–>文档的映射,或者说已知关键字求文档)
逻辑结构部分是一个倒排索引表,由三部分组成:
1、将搜索的文档最终以Document方式存储起来。
2、将要搜索的文档内容粉刺,所有不重复的词组成分词列表。
3、每个分词和document都有关联。
如下:
现在,如果我们想搜索 包含quick brown词条的文档:
两个文档都匹配,但是第一个文档比第二个匹配度更高。如果我们进计算匹配词条数量的简单相似性算法,那么可以说,对于我们查询的相关性来讲,第一个文档比第二个文档更符合条件。
1.5.RESTful应用方法
如何使用es?
Elasticsearch提供 RESTful Api接口进行索引、搜索,并且支持多种客户端。
2.安装ElasticSearch
2.1.环境要求
1、jdk必须是jdk1.8.0_131以上版本。 2、ElasticSearch 需要至少4096 的线程池和
262144字节以上空间的虚拟内存才能正常启动,所以需要为虚拟机分配至少1.5G以上的内存
3、从5.0开始,ElasticSearch 安全级别提高了,不允许采用root帐号启动
4、Elasticsearch的插件要求至少centos的内核要3.5以上版本
2.2.ContentOS7安装ES
2.2.1.下载
ElasticSearch官网:https://www.elastic.co/cn/
2.2.2.设置虚拟机内存
2.2.3.创建用户
从5.0开始,ElasticSearch 安全级别提高了,不允许采用root帐号启动,所以我们要添加一个用户。
#1.创建elk用户组
groupadd elk
#2.创建用户admin
useradd admin
passwd admin
#3.将admin用户添加到elk组
usermod -G elk admin
#4.为用户分配权限
#chown将指定文件的拥有着改为指定的用户或组 -R处理指定目录以及其子目录下的所有文件
chown -R admin:elk /usr/upload #文件下载/上传目录
chown -R admin:elk /usr/local #安装目录
#5.切换用户
use admin
2.2.4.安装
ES是Java开发的应用,解压即安装:
tar -zxvf elasticsearch-6.2.2.tar.gz -C /usr/local
2.2.5.ES目录结构
#切换到es目录查看目录结构
cd /usr/local/elasticsearch-6.2.2/
目录结构:
bin 目录:可执行文件包
config 目录:配置相关目录
lib 目录:ES 需要依赖的 jar 包,ES 自开发的 jar 包
logs 目录:日志文件相关目录
modules 目录:功能模块的存放目录,如aggs、reindex、geoip、xpack、eval
plugins 目录:插件目录包,三方插件或自主开发插件
data 目录:在 ES 启动后,会自动创建的目录,内部保存 ES 运行过程中需要保存的数据。
2.3.配置文件
ES安装目录config中配置文件如下:
- elasticsearch.yml:用于配置Elasticsearch运行参数
- jvm.options:用于配置Elasticsearch JVM设置
- log4j2.properties:用于配置Elasticsearch日志
2.3.1.修改elasticsearch.yml
配置如下:
cluster.name: NB_shop(一般)
node.name: power_shop_node_1
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: ["0.0.0.0:9300", "0.0.0.0:9301"]
path.data: /usr/local/elasticsearch-6.2.3/data
path.logs: /usr/local/elasticsearch-6.2.3/logs
http.cors.enabled: true
http.cors.allow-origin: /.*/
描述:
cluster.name:
配置elasticsearch的集群名称,默认是elasticsearch。建议修改成一个有意义的名称。
node.name:
节点名,通常一台物理服务器就是一个节点,es会默认随机指定一个名字,建议指定一个有意义的名称,方便管理一个或多个节点组成一个cluster集群,集群是一个逻辑的概念,节点是物理概念,后边章节会详细介绍。
path.data:
设置索引数据的存储路径,默认是es_home下的data文件夹,可以设置多个存储路径,用逗号隔开。
path.logs:
设置日志文件的存储路径,默认是es_home下的logs文件夹
network.host:
设置绑定主机的ip地址,设置为0.0.0.0表示绑定任何ip,允许外网访问,生产环境建议设置为具体的ip。
http.port: 9200
设置对外服务的http端口,默认为9200。
transport.tcp.port: 9300
集群结点之间通信端口
discovery.zen.ping.unicast.hosts:[“host1:port”, “host2:port”, “…”]
设置集群中master节点的初始列表。
discovery.zen.ping.timeout: 3s
设置ES自动发现节点连接超时的时间,默认为3秒,如果网络延迟高可设置大些。
http.cors.enabled:
是否支持跨域,默认为false
http.cors.allow-origin:
当设置允许跨域,默认为*,表示支持所有域名
2.3.2.jvm.options
在jvm.options中设置 -Xms和-Xmx:
- 将两个值设置为相等
- 将Xmx设置为不超过物理内存的一般。
设置最下机最大的JVM堆内存大小, 默认占用内存都是1g,占用太多,调小一点:
-Xms512m
-Xmx512m