elasticsearch笔记
elasticsearch笔记
由于项目上要用到elasticsearch,发现很久都没有亲手部署过elasticsearch了,部署之后发现一些问题,所以写此博客记录。顺便回顾es的一些知识点。
elasticearch概述
elaticsearch,简称为es, es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别(大数据时代)的数据。es也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单RESTfulAPI来隐藏Lucene的复杂性,从而让全文搜索变得简单。
简单的说elasticsearch是一个基于Lucene的近实时分布式搜索和分析引擎。
什么是Lucene
Lucene是用JAVA写成的,目标是为各种中小型应用软件加入全文检索功能的搜索引擎库(jar包)。
Lucene的缺点
1、不支持分布式,多台服务器要通过代码合并搜索结果,不友好,开发复杂。
2、 无法实现HA,服务器挂了数据就丢了。
elasticearch和Solr的区别
说到es就不得不提到solr ,因为solr也是一个基于Lucene
的全文搜索服务器。具体的介绍就不多说,想要详细了解的可自行搜索,这里只做比较。
1、solr 查询快,但更新索引时慢(即插入删除慢),用于电商等查询多的应用;
2、es建立索引快(即查询慢),即实时性查询快,用于facebook新浪等搜索;
3、es安装简洁(开箱即用),solr相对复杂;
4、es自身带有分布式协调管理功能,solr是基于zookeeper进行分布式管理;
5、es仅仅支持json格式数据,而solr支持多种数据格式:json、XML、CSV;
elasticsearch应用范围
1、搜索类网站,如维基百科、百度百科
2、电商网站检索商品
3、数据分析和挖掘领域,比如用户群体分析、营收增长等
4、ELK技术(elasticsearch+logstash+kibana)
ES特点及优势
1、可以作为大型的分布式集群,处理PB级的数据,也可以单机运行。
2、开箱即用非常简单,隐藏了Lucene的复杂性。
3、弥补数据库的不足(事务,联机型事物操作),可以进行全文检索,同义词处理,相关度排名,复杂数据分析等。
4、API更简单,更高级。
5、支持多种语言。
6、支持PB级数据。
7、完成搜索和分析功能。
elasticsearch核心概念
Index(索引)
类似于我们Mysql里面的一个数据库 ,好比就是一个索引库。
Type(类型-表)
ES6以后一个index只能有一个type,为了提高查询效率。
Document(文档-行)
文档就是最终的数据了,可以认为一个文档就是一条记录。
是ES里面最小的数据单元,就好比表里面的一条数据。
Field(字段-列)
好比关系型数据库中列的概念,一个document有一个或者多个field组成。
mapping(映射-约束)
数据如何存放到索引对象上,需要有一个映射配置,包括:数据类型、是否存储、是否分词等。
Shard(分片)
当有大量的文档时,由于内存的限制、磁盘处理能力不足、无法足够快的响应客户端的请求等,一个节点可能不够。这种情况下,数据可以分为较小的分片。每个分片放到不同的服务器上。
当你查询的索引分布在多个分片上时,ES会把查询发送给每个相关的分片,并将结果组合在一起,而应用程序并不知道分片的存在。即:这个过程对用户来说是透明的。
Replia(副本)
为提高查询吞吐量或实现高可用性,可以使用分片副本。
副本是一个分片的精确复制,每个分片可以有零个或多个副本。ES中可以有许多相同的分片,其中之一被选择更改索引操作,这种特殊的分片称为主分片。
当主分片丢失时,如:该分片所在的数据不可用时,集群将副本提升为新的主分片。
全文检索
将一篇文章切分为一个个的词或字,分别创建索引,分别之名在这个词中出现的次数和位置,当用户查找时,即通过事先建立的索引进行查找。
倒排索引
就是根据内容查ID,然后再通过ID查询出需要的内容。
elasticsearch安装部署
jdk版本:jdk11
es版本:7.6.1
elasticsearch下载地址:https://www.elastic.co/cn/downloads/elasticsearch
注意:es版本和jdk版本有对应关系,并且在java开发中,elasticSearch 的版本和 Java 的核心jar包的版本也要对应。下面是es和jdk的版本对应关系图。
1、windows版本安装
1、es是开箱即用,所以解压就可以使用。
2、在安装目录的bin目录下双击elasticsearch.bat启动es:
如图所示 9200 是es基于http的外部通讯端口,started表示启动成功。
打开浏览器进行访问测试:
3、安装可视化界面插件elasticsearch-head:
- 首先需要安装node环境
node下载地址:http://nodejs.cn/download/
下载Windows版msi,傻瓜式安装,一直点next即可:
检验:cmd进入DOS,输入 node -v 命令,返回的是node.js的版本,说明安装成功。
- 安装grunt
grunt是一个很方便的构建工具,可以进行打包压缩、测试、执行等等的工作,es-head就是通过grunt启动的。
输入命令安装:
npm install -g grunt-cli
查看版本号 grunt -version
- 安装elasticsearch-head:
下载地址:https://github.com/mobz/elasticsearch-head/
解压,进入head文件夹下,执行命令:npm install
如果安装速度慢,设置成淘宝的镜像重新安装 npm config set registry https://registry.npm.taobao.org
-
启动es-head :输入npm run start或grunt server命令
-
安装完成之后,修改es路径下的elasticsearch.yml文件
增加新的参数
http.cors.enabled: true http.cors.allow-origin: "*"
- 启动 / 重启 elasticsearch
2、linux版本安装
-
官网下载linux对应的安装包,同上。
-
将安装包上传到虚拟机,解压。
tar -xvf elasticsearch-7.6.1-linux-x86_64.tar.gz -
将解压后的文件放到/opt/software/下
mv elasticsearch-7.6.1 /opt/software/ -
修改配置文件elasticearch.yml
vim /opt/software/elasticsearch-7.6.1/config/elasticearch.yml
-
修改jvm.options
vim /opt/software/elasticsearch-7.6.1/config/jvm.options
- 修改limits.conf
vim /etc/security/limits.conf
- 在 /etc/sysctl.conf 中增加
vm.max_map_count=262145
- 后台运行elasticsearch
./elasticsearch -d