一、为什么要用 Elasticsearch ?
一般我们去访问一个电商首页,都会直接用搜素来找自己想买的商品。
但是商品的数量非常多,而且分类繁杂。如何能正确的显示出用户想要的商品,并进行合理的过滤,尽快促成交易,是搜索系统要研究的核心。
面对这样复杂的搜索业务和数据量,使用传统数据库搜索就显得力不从心,(你想啊,在传统数据库中从成千上万的数据中去搜素,效率会有低,速度会有多慢?)所以一般我们都会使用全文检索技术,比如 Solr、Elasticsearch 。
而今天,我们要学的是:Elasticsearch。
二、Elasticsearch 简介
Elasticsearch 是 Elastic 的一个产品。
Elastic官网:https://www.elastic.co/cn/
Elastic有一条完整的产品线及解决方案:Elasticsearch、Kibana、Logstash 等。
而其中的 Elasticsearch、Kibana、Logstash 就是大家常说的ELK技术栈。
访问 Elasticsearch官网:https://www.elastic.co/cn/products/elasticsearch ,我们能看到Elasticsearch的介绍:
总结来说Elasticsearch的特点就是:
-
分布式,无需人工搭建集群(solr就需要人为配置,使用Zookeeper作为注册中心)
-
Restful风格,一切API都遵循Rest原则
-
近实时搜索,数据更新在Elasticsearch中几乎是完全同步的。
Elasticsearch 版本更新还是比较快的,不过不影响我们的基本学习。
我们今天学习Elasticsearch 用的版本是 6.3.0
环境的话,需要JDK1.8以及以上。
三、Elasticsearch 安装和配置
模拟真实使用场景,我们在linux下安装Elasticsearch 。
1.新键一个用户 leyou ,并切换到这个用户
因为出于安全考虑,Elasticsearch 默认不允许以root账号运行。
所以我们来创建一个用户:
useradd leyou
设置密码:
passwd leyou
然后切换用户:
su - leyou
2. 上传Elasticsearch 安装包,并解压
上传安装包:
解压安装包:
tar -zxvf elasticsearch-6.2.4.tar.gz
为方便使用,重命名目录名:
mv elasticsearch-6.3.0/ elasticsearch
3.修改配置
进入并elasticsearch下的config文件夹
cd elasticsearch/config
3.1 jvm.options
Elasticsearch基于Lucene的,而Lucene底层是java实现,因此我们需要配置jvm参数。
编辑 jvm.options
vim jvm.options
修改内存占用:
(大家不一定要调成256m,虚拟机或者云服务器内存比较大的话,也可以调成512m,或者就让他默认 1g )
3.2 elasticsearch.yml
修改数据和日志的目录。
vim elasticsearch.yml
修改如下:
path.data: /home/leyou/elasticsearch/data # 数据目录位置
path.logs: /home/leyou/elasticsearch/logs # 日志目录位置
然后进入elasticsearch的根目录,把刚刚指定的 data和logs目录创建出来:
mkdir data
mkdir logs
3.3 修改绑定的ip
绑定到0.0.0.0,允许任何ip来访问
vim elasticsearch.yml
network.host: 0.0.0.0
任何我们运行试试:
进入到 elasticsearch 下的bin目录下:
输入启动命令:
./elasticsearch
然后启动报错了;
因为还有几个地方要注意:
①内核过低
Elasticsearch的插件要求至少Linux内核版本3.5以上。我们禁用这个插件即可。
修改elasticsearch.yml文件,在最下面添加如下配置:
bootstrap.system_call_filter: false
②文件权限不足
我们用的是leyou用户,不是root,使用文件权限不足。所以我们要去修改一些文件的权限;
切换到 root 用户
然后修改配置文件:
vim /etc/security/limits.conf
添加下面的内容:
* soft nofile 65536
* hard nofile 131072
* soft nproc 4096
* hard nproc 4096
③ 线程数不够
还是在root用户下,修改配置
vim /etc/security/limits.d/90-nproc.conf
将 * soft nproc 1024 修改成 * soft nproc 4096
④ 进程虚拟内存不足
修改配置,提高虚拟内存
vim /etc/sysctl.conf
添加如下内容:
vm.max_map_count=655360
刷新系统配置:
sysctl -p
然后关闭终端,重新打开连接,并切换到 leyou用户
在elasticsearch的bin目录下,运行启动elasticsearch:
./elasticsearch
启动成功后,我们可以看到,有两个端口:
其中:
9300:集群节点间通讯接口
9200:客户端访问接口
所以这里我们用 9200去访问。
在浏览器访问 http://你的虚拟机或服务器ip:9200
访问成功了。
四、Kibana
1.什么是Kibana?和Elasticsearch有什么关系?
Kibana是一个基于Node.js的Elasticsearch索引库数据统计工具,可以利用Elasticsearch的聚合功能,生成各种图表,如柱形图,线状图,饼图等。
而且还提供了操作Elasticsearch索引数据的控制台,并且提供了一定的API提示,非常有利于我们学习Elasticsearch的语法。
2.安装Kibana
因为Kibana依赖于node,而我们的虚拟机或服务器没有安装node,而window中安装过。所以我们选择在window下使用kibana。
版本与elasticsearch保持一致,也是用6.3.0。
1.将资料中的Kibana压缩包 解压到 leyou/tools 下。
2.修改配置
修改 kibana-6.3.0-windows-x86_64\config 下的 kibana.yml 配置文件:
修改其中的elasticsearch服务器的地址:
3.运行 Kibana
双击bin文件夹下的 kibana.bat 。
启动成功后,可以看到端口是5601。
我们访问 http://127.0.0.1:5601 看看:
五、安装ik分词器
Lucene的IK分词器早在2012年已经没有维护了,现在我们要使用的是在其基础上维护升级的版本,并且开发为ElasticSearch的集成插件了,与Elasticsearch一起维护升级,版本也保持一致,6.3.0。
1. 将压缩文件上传到 Elasticsearch目录下的plugins中。
2.解压 并重命名
unzip elasticsearch-analysis-ik-6.3.0.zip -d ik-analyzer
解压完记得删除压缩包:
rm -f elasticsearch-analysis-ik-6.3.0.zip
然后重启elasticsearch。
我们来测试一下看看。
在 kibana控制台输入请求并运行:
POST _analyze
{
"analyzer": "ik_max_word",
"text": "我是中国人"
}