(1)可以作为一个大型分布式集群(数百台服务器)技术,处理PB级数据,服务大公司;也可以运行在单机上;
(2)将全文检索、数据分析以及分布式技术,合并在了一起,才形成了独一无二的ES;
(3)开箱即用的,部署简单;
(4)全文检索,同义词处理,相关度排名,复杂数据分析,海量数据的近实时处理 。
下载地址如下,无需安装,解压安装包后即可使用https://www.elastic.co/downloads/past-releases/elasticsearch-5-6-8
ElasticSearch-head:是集群管理、数据可视化、增删改查、查询语句可视化工具。
下载head插件:https://github.com/mobz/elasticsearch-head
安装node js ,安装cnpm
npm install ‐g cnpm ‐‐registry=https://registry.npm.taobao.org
将grunt安装为全局命令 ,Grunt是基于Node.js的项目构建工具。
npm install ‐g grunt‐cli
安装依赖
cnpm install
进入head目录启动head
grunt server
修改elasticsearch配置文件:elasticsearch.yml,增加如下代码,让其允许跨域访问。
http.cors.enabled: true
http.cors.allow‐origin: "*"
打开浏览器,输入 http://localhost:9100,进行访问,输入elasticsearch的端口进行连接。
Logstash是一款轻量级的日志搜集处理框架,可以方便的把分散的、多样化的日志搜集 起来,并进行自定义的处理,然后传输到指定的位置,比如某个服务器或者文件。具体步骤就不讲解了,下载解压后,在logstash-5.6.8安装目录下创建任意文件夹,在文件夹下创建mysql.conf ,需要填写一个连接信息模板内容,可以自行百度一个模板去填写自己的elasticsearch与MySQL信息。
在docker中下载和创建容器的过程,不在这里介绍,主要想介绍一下,令我印象深刻的部分,这个问题当初在做学校项目,以及自己学习中都遇到,所以想在这里多介绍一下,这也是我日后准备面试,想要去阐述的做项目时遇到的困难以及难点。因为第一确实,这个问题当初困扰了很久,然后成功解决,第二这个问题确实并不简单。
那么我们说一下这个问题,elasticsearch从5版本以后默认不开启远程连接,需要修改配置文件。elasticsearch所在的目录为/usr/share/elasticsearch ,进入config看到了配置文件elasticsearch.yml,尝试后,容器并没有vi命令,无法编辑配置文件。 我们需要以文件挂载的方式创建容器才行,这样我们就可以通过修改宿主机中的某个文件来实现对容器内配置文件的修改。重新创建以后,将 transport.host: 0.0.0.0 前的#去掉后保 存文件退出。其作用是允许任何ip地址访问elasticsearch ,开发测试中这样就可以了,生产中要配置具体 transport.host。
此时并没有结束,elasticsearch在启动的时候会进行一些检查,比如最多打开的文件的个数以及虚拟内存 区域数量等等,如果你放开了此配置,意味着需要打开更多的文件以及虚拟内存,所以我们还需要系统调优。
修改/etc/security/limits.conf ,nofile是单个进程允许打开的最大文件个数 。 soft nofile 是软限制 ,hard nofile是硬限制。
* soft nofile 65536
* hard nofile 65536
修改/etc/sysctl.conf,限制一个进程可以拥有的VMA(虚拟内存区域)的数量
vm.max_map_count=655360
重新启动虚拟机,再次启动容器,发现已经可以启动并远程访问 。
elasticsearch Spring DataElasticsearch
ES 集群架构 3个节点,索引根据通道不同共 10+索引索引:6分片,每日递增百万千万级数据,每个通道每天索引大小控制:5GB 之内。
1、设计阶段调优
(1)根据业务增量需求,采取基于日期模板创建索引,通过 roll over API 滚动索引;
(2)使用别名进行索引管理;
(3)每天凌晨定时对索引做 force_merge 操作,以释放空间;
(4)采取冷热分离机制,热数据存储到 SSD,提高检索效率;冷数据定期进行 shrink操作,以缩减存储;
(5)采取 curator 进行索引的生命周期管理;
(6)仅针对需要分词的字段,合理的设置分词器;
(7)Mapping 阶段充分结合各个字段的属性,是否需要检索、是否需要存储等。………
2、写入调优
(1)写入前副本数设置为 0;
(2)写入前关闭 refresh_interval 设置为-1,禁用刷新机制;
(3)写入过程中:采取 bulk 批量写入;
(4)写入后恢复副本数和刷新间隔;
(5)尽量使用自动生成的 id。
3、查询调优
(1)禁用 wildcard;
(2)禁用批量 terms(成百上千的场景);
(3)充分利用倒排索引机制,能 keyword 类型尽量 keyword;
(4)数据量大时候,可以先基于时间敲定索引再检索;
(5)设置合理的路由机制。
倒排索引,相反于一篇文章包含了哪些词,它从词出发,记载了这个词在哪些文档中出现过,由两部分组成——词典和倒排表。
加分项:倒排索引的底层实现是基于:FST(Finite State Transducer)数据结构。
lucene 从 4+版本后开始大量使用的数据结构是 FST。FST 有两个优点:
(1)空间占用小。通过对词典中单词前缀和后缀的重复利用,压缩了存储空间;
(2)查询速度快。O(len(str))的查询时间复杂度。