一、为什么要用 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":     "我是中国人"
}