前言
公司老总对我说,需要用到elasticsearch,这不,就抓紧过来学了,然后记录下学习过程。
先学习下载和安装吧。送上官网,里面啥都有,还是比较好找的,从这里下载elasticsearch和kibana。https://www.elastic.co/cn/elasticsearch/
使用版本 elasticsearch6.4.2 、kibana6.4.2
博客目录
- elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
- elasticsearch学习二:使用springboot整合TransportClient 进行搭建elasticsearch服务
- elasticsearch学习三:elasticsearch-ik分词器的自定义配置 分词内容
- elasticsearch学习四:使用springboot整合 rest 进行搭建elasticsearch服务
一、elasticsearch
1. 了解一下
- 官网:https://www.elastic.co/guide/en/elasticsearch/reference/6.8/documents-indices.html
- elasticsearch中文版教程:https://www.bootwiki.com/elasticsearch/elasticsearch-installation.html
Elasticsearch是一个
分布式文档存储
。Elasticsearch不会将信息存储为列数据的行,而是存储已序列化为JSON文档的复杂数据结构
。当集群中有多个Elasticsearch节点时,存储的文档将分布在集群中,并且可以从任何节点立即访问。存储文档时,将在
1秒内
几乎实时地对其进行索引和完全搜索。Elasticsearch使用称为倒排索引
的数据结构,该结构支持非常快速的全文本搜索。反向索引列出了出现在任何文档中的每个唯一单词,并标识了每个单词出现的所有文档。索引可以认为是
文档的优化集合,每个文档都是字段的集合,这些字段是包含数据的键值对
。默认情况下,Elasticsearch对每个字段中的所有数据建立索引,并且每个索引字段都具有专用的优化数据结构。
例如,文本字段存储在倒排索引中,数字字段和地理字段存储在BKD树中。使用按字段数据结构组合并返回搜索结果的能力使Elasticsearch如此之快。Elasticsearch还具有无模式的能力,这意味着无需显式指定如何处理文档中可能出现的每个不同字段即可对文档建立索引。启用动态映射后,Elasticsearch自动检测并向索引添加新字段。这种默认行为使索引和浏览数据变得容易-只需开始建立索引文档,Elasticsearch就会检测布尔值,浮点数和整数值,日期和字符串并将其映射到适当的Elasticsearch数据类型。
但是,最终,您比Elasticsearch更了解您的数据以及如何使用它。您可以定义规则来控制动态映射,并显式定义映射以完全控制字段的存储和索引方式。
定义自己的映射使您能够:
区分全文字符串字段和精确值字符串字段- 执行特定于语言的文本分析
- 优化字段以进行部分匹配
- 使用自定义日期格式
- 使用无法自动检测到的 数据类型,例如geo_point和geo_shape
Elasticsearch 是一个建立在全文搜索引擎 Apache Lucene™ 基础上的搜索引擎,可以说 Lucene 是当今最先进,最高效的全功能开源搜索引擎框架。
Elasticsearch是基于Apache Lucene的搜索服务器。它由Shay Banon开发并于2010年发布。现在是由Elasticsearch BV负责维护。其最新版本是:7.2.x。
Elasticsearch是一个实时分布式和开源的全文搜索和分析引擎。 它可以从RESTful Web服务接口访问,并使用模式少JSON(JavaScript对象符号)文档来存储数据。它是基于Java编程语言,这使Elasticsearch能够在不同的平台上运行。使用户能够以非常快的速度来搜索非常大的数据量。
2. Elasticsearch的特性
Elasticsearch的一般特性如下:
- Elasticsearch可扩展高达
PB级的结构化和非结构化数据
。 - Elasticsearch可以用来
替代MongoDB和RavenDB等做文档存储
。 - Elasticsearch使用
非标准化来提高搜索性能
。 - Elasticsearch是受欢迎的企业搜索引擎之一,目前被许多大型组织使用,如Wikipedia,The Guardian,StackOverflow,GitHub等。
- Elasticsearch是开放源代码,可在Apache许可证版本2.0下提供。
3. Elasticsearch的主要概念
Elasticsearch的主要概念如下 -
节点
- 它指的是Elasticsearch的单个正在运行的实例。单个物理和虚拟服务器容纳多个节点,这取决于其物理资源的能力,如RAM,存储和处理能力。集群
- 它是一个或多个节点的集合。 集群为整个数据提供跨所有节点的集合索引和搜索功能。索引
- 它是不同类型的文档和文档属性的集合。索引还使用分片的概念来提高性能。 例如,一组文档包含社交网络应用的数据。类型/映射
- 它是共享同一索引中存在的一组公共字段的文档的集合。 例如,索引包含社交网络应用的数据,然后它可以存在用于用户简档数据的特定类型,另一类型可用于消息的数据,以及另一类型可用于评论的数据。文档
- 它是以JSON格式定义的特定方式的字段集合。每个文档都属于一个类型并驻留在索引中。每个文档都与唯一标识符(称为UID)相关联。碎片
- 索引被水平细分为碎片。这意味着每个碎片包含文档的所有属性,但包含的数量比索引少。水平分隔使碎片成为一个独立的节点,可以存储在任何节点中。主碎片是索引的原始水平部分,然后这些主碎片被复制到副本碎片中。副本
- Elasticsearch允许用户创建其索引和分片的副本。 复制不仅有助于在故障情况下增加数据的可用性,而且还通过在这些副本中执行并行搜索操作来提高搜索的性能。
4. Elasticsearch的优点
- Elasticsearch是基于Java开发的,这使得它在几乎每个平台上都兼容。
- Elasticsearch是实时的,换句话说,一秒钟后,添加的文档可以在这个引擎中搜索得到。
- Elasticsearch是分布式的,这使得它易于在任何大型组织中扩展和集成。
- 通过使用Elasticsearch中的网关概念,创建完整备份很容易。
- 与Apache Solr相比,在Elasticsearch中处理多租户非常容易。
- Elasticsearch使用JSON对象作为响应,这使得可以使用不同的编程语言调用Elasticsearch服务器。
- Elasticsearch支持几乎大部分文档类型,但不支持文本呈现的文档类型。
5. Elasticsearch的缺点
Elasticsearch在处理请求和响应数据方面没有多语言和数据格式支持(仅在JSON中可用
),与Apache Solr不同,Elasticsearch不可以使用CSV,XML等格式。
Elasticsearch也有一些伤脑的问题发生,虽然在极少数情况下才会发生。
6. Elasticsearch和RDBMS之间的比较
在Elasticsearch中,索引是类型的集合,因为数据库是RDBMS(关系数据库管理系统)中表的集合。每个表都是行的集合,就像每个映射都是JSON对象的Elasticsearch集合一样。
Elasticsearch | 关系数据库 |
---|---|
索引 | 数据库 |
碎片 | 碎片 |
映射 | 表 |
字段 | 字段 |
JSON对象 | 元组 |
二、版本对应
查了很多资料,知道了一个坑,也就是版本一定要是对应的,elasticsearch与kibana之间,elasticsearch与jdk的版本之间。springboot整合elasticsearch时的版本对应。在这里我就整理一下。
1. jdk与es版本对应
先看官网吧官网上的版本对应https://www.elastic.co/cn/support/matrix#matrix_jvm
基本上都是jdk1.8都支持。
2. kibana与es版本对应
这个对应就简单了,版本一致即可,否则有可能打不开,链接不上。
3. springboot整合elasticsearch
官网给的版本要求:
红框这栏指的是:Elasticsearch安装版本(windows安装版本或Linux按照版本)
最新因为项目需要elasticsearch,采用今天搞了好久,项目启动就报如下错误:
org.elasticsearch.transport.NodeDisconnectedException: [][127.0.0.1:9300][cluster:monitor/nodes/liveness] disconnected
找了好久以为是配置问题,最后终于明白原来是版本不统一。
我的项目用的spring boot 1.5.x
所以安装了elasticsearch-2.3.2.zip
二、运行elasticsearch
- 下载解压后目录如图所示:
- 进入到bin目录下,双击运行
elasticsearch.bat
文件 - 当出现 started 时,则运行成功。
- 打开谷歌浏览器,输入
http://localhost:9200
,出现如下图所示,则启动成功 - 然后 打开
config/elasticsearch.yml
文件
放开并修改以下几个配置
cluster.name: elasticsearch # 这个的名称为上图的cluster_name
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 20104
transport.host: 0.0.0.0
# 以下两个为 跨域设置
http.cors.enabled: true
http.cors.allow-origin: "*"
然后重启即可。
三、运行kibana
- 下载解压如下图所示:
- 进入到 bin 目录下,然后双击 kibana.bat 文件即可。
- 当出现如下图中的
http://localhost:5601
时,则运行成功,前提是需要运行 elasticsearch。 - 谷歌输入网址如下所示:
四、head插件
1. head插件简介
elasticsearch-head
被称为是弹性搜索集群的web前端,head插件主要是用来和elastic Cluster交互的Web前端。
2. head插件历史
elasticsearch-head插件
在0.x-2.x版本的时候是集成在elasticsearch内的,由elasticsearch的bin/elasticsearch-plugin来管理插件,可是从2.x版本跳到了5.x版本后,head就作用了一个独立的服务来运行了,脱离了elasticsearch的约束,所以相对来说,部署起来也比较繁琐了
3. chrome浏览器下的head插件安装
用chrome浏览器集成head插件,操作比较简单, 可再不用单独运行服务, 简化了head插件的安装.
4. 安装步骤
- 下载es-head.crx文件
插件下载地址:
链接:https://pan.baidu.com/s/1wM8molAqhdYmM225npInyg
提取码:m1ef
- 把下载好的
es-head-master
压缩后得到es-head.zip
文件。
然后进行解压得到es-head
点击右上角三个点->更多工具->扩展程序–打开右上角的开发者模式—加载已解压的扩展程序–上传刚才的es-head文件夹
, 打开浏览器看右上角的es-head图标插件, 即安装成功 - 打开head插件连接好es路径即可
- 到此 elasticsearch-head安装成功。
五、elasticsearch-ik分词器
- 百度
elasticsearch-ik
进入到GitHub页面,我这里也直接送上 GitHub页面https://github.com/medcl/elasticsearch-analysis-ik
然后拉到下面 看一下版本对应: - 然后回到上面,点击右边的
+ 134 releases
,去下载与elasticsearch、kibana同一个版本的软件。 - 这里下载6.4.2版本
- 然后,将压缩文件 放到 elasticsearch 解压目录下的 plugins/,然后解压,会出来好多jar包和文件,然后新建文件夹,命名为 ik,将所有解压的文件放到ik文件夹中即可。
如下: - 然后重启 elasticsearch和 kibana,出现如下图则ik分词器加载成功。
- 进入到
bin
目录下的cmd命令行模式,输入命令elasticsearch-plugin list
,来查看加载进来的所有插件。 - 到目前为止,elasticsearch-ik 插件安装成功。
- 打开kibana进行测试,如下所示,则 ik 分词器 安装成功。
ik_smart: 最少切分
ik_max_word 为最细粒度划分!
六、总结
到目前为止,elasticsearch、kibana、Google-head插件、elasticsearch-ik
安装成功。