目录
前言
安装内容:
版本说明:
安装时可能遇到的问题:
一、全文检索基础
1.1 什么是全文检索
1. 2全文检索流程
1.3 相关概念
1.3.1. 索引库
1.3.2. document对象
1.3.3. field对象
1.3.4. term对象
二、ElasticSearch简介
2.1 什么是ElasticSearch
2.2 ElasticSearch的使用案例
2.3 ElasticSearch对比Solr
三、ElasticSearch相关概念(术语)
3.1 概述
3.2 Elasticsearch核心概念
3.2.1 索引 index
3.2.2 类型 type
3.2.3 字段Field
3.2.4 映射 mapping
3.2.5 文档 document
3.2.6 接近实时 NRT
3.2.7 集群 cluster
3.2.8 节点 node
3.2.9 分片和复制 shards&replicas
四、Elasticsearch 安装
4.1docker镜像下载
4.2安装es容器
4.3开启远程连接
五、ElasticSearch的客户端操作
5.1 elasticsearch-head
六、IK分词器
6.1 IK分词器简介
6.2 IK分词器安装
6.2.1 安装ik分词器
七、Kibana使用-掌握DSL语句
7.1 Kibana下载安装
安装环境为Linux下docker安装
因为我们学的是ElasticSearch的5.6.8版本,所以只介绍是什么,怎么装,原因:版本说明。
- ElasticSearch
- ES客户端 (条件时本机已经安装了nodejs和cnpm)
- IK分词器
- Kibana
es的版本阶段我分为6.0之前,6.0~7.0,7.0之后。6.0之前一个索引下可以有很多type,6.0~7.0type已经被逐渐废弃,但是这时候一个索引仍然可以设置多个类型,7.0之后一个索引就只能创建一个类型,版本变化,但是安装和概念还是不变的。
本文章es、IK分词器、Kibana使用的都是5.6.8,es和IK分词器版本不容会产生es容器启动不起来,es和Kibana版本不用会产生Kibana的status:red
1.连接Linux的工具右键粘贴失效:esc切换命令模式,输入set mouse-=a 回车再右键粘贴,如图:
2.kibana的Status:Red
解决:status:Red&Unable to connect to Elasticsearch at http....9200_nathen小光的博客-CSDN博客
索引库就是存储索引的保存在磁盘上的一系列的文件。里面存储了建立好的索引信息以及文档对象。
一个索引库相当于数据库中的一张表。
获取原始内容的目的是为了索引,在索引前需要将原始内容创建成文档(Document),文档中包括一个一个的域(Field),域中存储内容。每个文档都有一个唯一的编号,就是文档id。
document对象相当于表中的一条记录。
如果我们把document看做是数据库中一条记录的话,field相当于是记录中的字段。field是索引库中存储数据的最小单位。field的数据类型大致可以分为数值类型和文本类型,一般需要查询的字段都是文本类型的,field的还有如下属性:
是否存储:将Field值存储在文档中,存储在文档中的Field才可以从Document中获取 比如:商品
名称、订单号,凡是将来要从Document中获取的Field都要存储。
term对象 从文档对象中拆分出来的每个单词叫做一个Term,不同的域中拆分出来的相同的单词是不同的term。term中包含两部分一部分是文档的域名,另一部分是单词的内容。term是创建索引的关键词对象。
Elaticsearch,简称为es, es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
Elasticsearch是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在Elasticsearch中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。Elasticsearch比传统关系型数据库如下
Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices -> Types -> Documents -> Fields
一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。在一个集群中,可以定义任意多的索引。
在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具有一组共同字段的文档定义一个类型。比如说,我们假设你运营一个博客平台并且将你所有的数据存储到一个索引中。在这个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,当然,也可以为评论数据定义另一个类型。
相当于是数据表的字段,对文档数据根据不同属性进行的分类标识
mapping是处理数据的方式和规则方面做一些限制,如某个字段的数据类型、默认值、分析器、是否被索引等等,这些都是映射里面可以设置的,其它就是处理es里面数据的一些使用规则设置也叫做映射,按着最优规则处理数据对性能提高很大,因此才需要建立映射,并且需要思考如何建立映射才能对性能更好。
Elasticsearch是一个接近实时的搜索平台。这意味着,从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1秒以内)
一个集群就是由一个或多个节点组织在一起,它们共同持有整个的数据,并一起提供索引和搜索功能。一个集群由一个唯一的名字标识,这个名字默认就是“elasticsearch”。这个名字是重要的,因为一个节点只能通过指定某个集群的名字,来加入这个集群
docker pull elasticsearch:5.6.8
docker run -di --name=kkb_es -p 9200:9200 -p 9300:9300 elasticsearch:5.6.8
9200端口(Web管理平台端口) 9300(服务默认端口)
浏览器输入地址访问: http://192.168.211.132:9200/
我们需要修改es配置开启远程连接,代码如下:
#1.登录容器
docker exec -it kkb_es /bin/bash
# 2. 安装vim编辑器 (es是没有vim命令的,所以需要安装)
apt-get update //链接失败是查看es异常文档
apt-get install vim //安装vim
# 3. 修改elasticsearch.yml配置:
vi config/elasticsearch.yml
cluster.name: my-es
transport.host: 0.0.0.0
http.cors.enabled: true # 允许elasticsearch跨域访问,默认false
http.cors.allow-origin: "*" # 允许任意域名跨域访问
network.host: 192.168.0.104
(如果右键粘贴失败,esc命令输入模式输入:set mouse-=a,回车再右键)
如图:
exit # 退出es容器
# 4. 设置nofile
vi /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536 # nofile是单个进程允许打开的最大文件个数 soft nofile 是软限制
hardnofile是硬限制
# 5. 设置虚拟内存
vi /etc/sysctl.conf
vm.max_map_count=655360 # 限制一个进程可以拥有的VMA(虚拟内存区域)的数量
# 修改内核参数马上生效
sysctl -p
# 6. 重启linux
reboot
# 7. 测试,启动es
docker start kkb_es
访问:192.168.0.104:9200
实际开发中,主要有三种方式可以作为elasticsearch服务的客户端:
ElasticSearch不同于Solr自带图形化界面,我们可以通过安装ElasticSearch的head插件,完成图形化界面的效果,完成索引数据的查看。安装插件的方式有两种,在线安装和本地安装。本文档采用本地安装方式进行head插件的安装。elasticsearch-5-*以上版本安装head需要安装node和grunt
1)下载head插件:https://github.com/mobz/elasticsearch-head
2)将elasticsearch-head-master压缩包解压到本机任意目录,不是虚拟机,但是要和elasticsearch的安装目录区别开,目录最好不要有中文和空格
3)检查本机是否装有node,没安装的先安装,es客户端安装要用,cnpm没安装的将下面cnpm换成npm即可
终端输入: node -v
5)将grunt安装为全局命令 ,Grunt是基于Node.js的项目构建工具
在cmd控制台中输入如下执行命令:
cnpm install -g grunt-cli
6)进入elasticsearch安装目录启动head,在命令提示符下输入命令:
cnpm install //可能报错,只要是不报找不到package.json,就在运行一次
grunt server //启动head,如图
7)打开浏览器,输入 http://localhost:9100,看到如下页面:
链接时输入自己的虚拟机ip:9200
如果不能成功连接到es服务,需要修改ElasticSearch的config目录下的配置文件:
config/elasticsearch.yml,增加以下两句命令:
http.cors.enabled: true
http.cors.allow-origin: "*"
然后重新启动ElasticSearch服务。
IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始,IKAnalyzer已经推出 了3个大版本。最初,它是以开源项目Lucene为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的IKAnalyzer3.0则发展为 面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。
IK分词器3.0的特性如下:
1)采用了特有的“正向迭代最细粒度切分算法“,具有60万字/秒的高速处理能力。
2)采用了多子处理器分析模式,支持:英文字母(IP地址、Email、URL)、数字(日期,常用中文数量词,罗马数字,科学计数法),中文词汇(姓名、地名处理)等分词处理。
3)对中英联合支持不是很好,在这方面的处理比较麻烦.需再做一次查询,同时是支持个人词条的优化的词典存储,更小的内存占用。
4)支持用户词典扩展定义。
5)针对Lucene全文检索优化的查询分析器IKQueryParser;采用歧义分析算法优化查询关键字的搜索排列组合,能极大的提高Lucene检索的命中率。
IK分词器下载地址 https://github.com/medcl/elasticsearch-analysis-ik/releases
将ik分词器上传到服务器上,然后解压,并改名字为ik,具体命令如下
下载:说明,ik版本要和es版本一致,否则容器启动失败
创建目录
cd ~
mkdir elasticsearch
上传文件(略)
进入所在目录,解压
cd elasticsearch
unzip elasticsearch-analysis-ik-8.1.0
重命名
mv elasticsearch/ ik
复制到dockers容器中
docker cp ./ik kkb_es:/usr/share/elasticsearch/plugins
查看
重启daoker
exit
docker restart kkb_es
(如果启动失败,可以查看日志:docker logs -f -t --tail 100 容器名,
如果es和ik版本不一样也会出现不兼容问题)
(2)IK分词器测试
说明:
ik_smart:会做最粗粒度的拆分
ik_max_word:会将文本做最细粒度的拆分
访问
1)测试:ik_smart:
http://192.168.0.104:9200/_analyze?analyzer=ik_smart&pretty=true&text=我是程序员
2)测试:ik_max_word
http://192.168.0.104:9200/_analyze?analyzer=ik_max_word&pretty=true&text=我是程序员
我们项目中不再使用linux,直接使用Docker,所有这里就不演示在windows的下载安装了。
(1)镜像下载:版本保持一致
docker pull docker.io/kibana:5.6.8
(2)安装kibana容器
执行如下命令,开始安装kibana容器
docker run -it -d -e ELASTICSEARCH_URL=http://192.168.0.104:9200 --name kibana -p 5601:5601 kibana:5.6.8
说明:
ELASTICSEARCH_URL=http://192.168.0.104:9200:是指链接的ES地址
restart=always:每次服务都会重启,也就是开启启动
5601:5601:端口号
(3)访问测试
成功后访问:192.168.0.104:5601/
如图: