一、为什么会选用ElasticSearch
mongodb一个collection里面存储了千万级数据,对字段内容(中文)进行模糊检索时,耗时大约200s,ElasticSearch则可以在1s内完成。
其实对于mongodb,新版本的(具体从哪个版本开始没注意)比如3.6.2,字段是可以建立一个text类型的索引的,也可以大大提高“全文检索”的查询性能,但只对英文内容有效果,对中文不起作用。
二、Elasticsearch安装
基于CentOS7系统
1.ElasticSearch 需要 Java 8 环境。一个十分清楚详细的安装链接:【Linux】CentOS7下安装JDK详细过程 - Angel挤一挤 - 博客园
CentOS7上安装JDK(Java Development Kit)的时候,都需要检查或卸载系统上原生的Open JDK,他们俩之间的区别还蛮大的。【JDK和Open JDK】平常使用的JDK和Open JDK有什么区别
2.安装ElasticSearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.3.zip
unzip elasticsearch-5.6.3.zip wget是下载至当前目录;unzip是解压,在zip文件同级别的目录下生成一个文件夹,目录结构如下:
----elasticsearch-5.6.3.zip
----elasticsearch-5.6.3(文件夹)
|----bin(文件夹)
|----config(文件夹,配置文件夹)
|----lib(文件夹)
|----modules(文件夹)
|----plugins(文件夹,常用的如ik中文分词等,都会安装在这个文件家里面)
|----LISENSE.txt
|----NOTICE.txt
|----README.textile这样下载安装部分就完了,一步一步走下去几乎不会有特殊情况出现。
三、ElasticSearch启动
elasticsearch是不允许在root用户下操作的,如果在root用户下启动
cd elasticsearch-5.6.3
./bin/elasticsearch会提示如下错误
java.lang.RuntimeException: can not run elasticsearch as root因此我们可以在root用户下,创建新用户组及用户,在elasticsearch-5.6.3同级目录下
groupadd esgroup
useradd esuser -g esgroup
chown -R esuser:esgroup elasticsearch-5.6.3 用户组及用户创建完毕,权限也提升之后,切换到esuser,启动elasticsearch即可(此时ES的配置文件没有做任何更改)
su - esuser(不能使用su esuser命令,否则刚才配置的java环境变量在esuser用户下不会生效)
cd elasticsearch-5.6.3
./bin/elasticsearch(可以在后面加 -d,即./bin/elasticsearch -d,可以后台运行)*********************
此步可能会有一些小小的坑,在第四部分讲
*********************
新开一个shell窗口,输入
curl localhost:9200会返回如下类似信息,elasticsearch已成功启动了
{
"name" : "pFCHWe9",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "dnEESyPrTMK4583Rmywaog",
"version" : {
"number" : "5.6.3",
"build_hash" : "1a2f265",
"build_date" : "2017-10-06T20:33:39.012Z",
"build_snapshot" : false,
"lucene_version" : "6.6.1"
},
"tagline" : "You Know, for Search"
}四、一些小坑
- 切换用户时。注意su esuser命令和su - esuser命令的区别
前者只是切换root身份,但shell环境仍然是普通用户的shell;
而后者连用户和shell环境一起切换成root身份了。只有切换了shell环境才不会出现PATH环境变量错误。su切换成root用户以后,pwd一下,发现工作目录仍然是普通用户的工作目录;而用su - 命令切换以后,工作目录变成root工作目录了。
- 在启动时会出现一些warning
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] 在不更改es配置文件(config文件夹下面的elasticsearch.yml文件)的时候,elasticsearch是能启动的,但如果想改一些配置比如改变network.host
network.host: 0.0.0.0(改变后的,这样可以通过外网访问)此时,需要修改上述两个warning涉及的配置,否则会报错,无法启动。
第一个waring解决方案: 切到root 用户,进入到security目录下的limits.conf;执行命令
vi /etc/security/limits.conf 在文件的末尾添加下面的参数值:
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096前面的*符号必须带上,然后重新启动就可以了。执行完成后可以使用命令 ulimit -n 查看进程数
第二个waring解决方案:切换到root用户,进入/etc目录下,修改sysctl.conf ,执行命令
vi /etc/sysctl.conf增加配置值:
vm.max_map_count=655360保存退出后执行命令
sysctl -p 这样就可以了,然后再启动ES服务即可