全文搜索属于最常见的需求,开源的 Elasticsearch
是目前全文搜索引擎的首选。
它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它。
本文从零开始,讲解如何使用 Elasticsearch
搭建自己的全文搜索引擎。每一步都有详细的说明,大家跟着做就能学会。
一、安装前虚准备的
Elastic 需要 Java 8 环境。如果你的机器还没安装 Java 必须先安装Java环境
sudo apt-get update
sudo apt-get install openjdk-8-jdk
安装完成后 还需要配置全局环境变量
- 可以通过命令查看java的安装位置
$ sudo update-alternatives --config java
- 复制首选安装的路径,然后打开
/etc/environment
$ sudo nano /etc/environment
- 在此文件中,添加以下行,确保使用您自己的复制路径替换突出显示的路径。
JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"
- 保存并退出该文件,然后重新加载它。
$ source /etc/environment
- 现在可以通过执行以下命令来测试环境变量是否已设置:
$ echo $JAVA_HOME
这将返回您刚刚设置的路径。
Java
安装现在告一个段落;下面进入安装Elasticsearch
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.1.zip
$ unzip elasticsearch-5.5.1.zip
$ cd elasticsearch-5.5.1/
二、安装Elasticsearch
然后,进入解压后的目录,运行下面的命令,启动Elasticsearch
$ ./bin/elasticsearch
这时候,根据所用的服务器的配置会时常会伴随各种报错,在文章最末尾会将踩过的坑及解决方案列举出来
如果一切正常,Elasticsearch
就会在默认的9200
端口运行。这时,打开另一个命令行窗口,请求该端口,会得到说明信息。
curl localhost:9200 # 终端请求
如果配置了外网访问可直接IP或者域名访问
IP:9200

上面代码中,请求9200
端口,Elasticsearch
返回一个 JSON
对象,包含当前节点、集群、版本等信息。
按下 Ctrl + C
,Elasticsearch
就会停止运行。
三、安装中文分词插件
安装中文分词插件。这里使用的是 ik,也可以考虑其他插件(比如 smartcn)。
$ ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.5.1/elasticsearch-analysis-ik-5.5.1.zip
上面代码安装的是5.5.1版的插件,与 Elastic 5.5.1 配合使用。
接着,重新启动 Elastic,就会自动加载这个新安装的插件。
现在 Elasticsearch
就基本安装完毕了
四、报错解决方案
1.org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
因为Elasticsearch
有执行脚本的能力,因安全因素,不能在root用户下运行 解决方案 更改 elasticsearch
文件的组 并用非 root
用户执行启动
2.如果这时报错 max virtual memory areas vm.maxmapcount [65530] is too low
切换到root用户修改配置文件
$ vim /etc/sysctl.d/99-sysctl.conf
最下面添加一行
vm.max_map_count=655360
并执行命令生效:
$ sysctl -p
然后,重新启动elasticsearch,即可启动成功。
3. max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
添加配置
$ vim /etc/sysctl.d/99-sysctl.conf
在后面加上fs.file-max=655350
保存之后sysctl -p使设置生效
添加配置
$ vim /etc/security/limits.conf
在后面添加
* soft nofile 655350
* hard nofile 655350
重新使用SSH登录,再次启动elasticsearch即可
4.外网访问解决方案
$ vim elasticsearch-5.5.1/config/elasticsearch.yml
添加一行
network.host: 0.0.0.0 #允许所有访问 非测试环境自己配置IP
开启常驻进程 并将进程id返回至文件中
./bin/elasticsearch -d -p pid
杀死Elasticsearch
当前进程
kill `cat pid`
查看 Elasticsearch
是否启动
ps aux|grep elasticsearch
查看当前java进程
jps