elasticsearch+mongodb搜索框架
一、安装jdk
elasticsearch是Java语言开发的,需要jdk1.8以上版本.
在oracle官网下载jdk:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
进入jdk所在目录,并解压到/usr/lib/jvm目录(不存在,则新建目录):
sudo tar zxvf ./jdk-8u65-linux-x64.tar.gz -C /usr/lib/jvm
进入该目录:
cd usr/lib/jvm
重命名文件夹,方便读记:
sudo mv jdk1.8.0_65/ java8
配置环境变量:
vi ~/.bashrc
使用vi命令编辑该文件,在文件底部加入以下命令:
export JAVA_HOME=/usr/lib/jvm/java8
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
使环境变量立即生效:
source ~/.bashrc
查看是否安装成功:
java -version
二、安装elasticsearch
Mongo-connector最新版支持ES 5.4
官网下载ES 5.4
https://www.elastic.co/downloads/elasticsearch
选择tar下载包:
es5.x版本 不能以root用户运行es,需增加普通用户,新加用户es
useradd es
切换es用户,解压tar包:
tar -xvf elasticsearch-5.4.0.tar.gz
进入解压后的目录:
cd elasticsearch-5.4.0/config
修改ES配置文件:
vim elasticsearch.yml
修改network.host使外网可以访问
关闭内存锁定
修改系统参数
vim /etc/security/limits.conf
使用一下命令修改 soft nproc 为2048
vim /etc/security/limits.d/90-nproc.conf
使用一下命令在最后添加一行数据如下: vm.max_map_count=262144
vim /etc/sysctl.conf
修改完后,执行如下命令 sysctl -p
ES基本配置完成,启动节点和单个集群(Windows环境运行elasticsearch.bat):
./elasticsearch
出现以下信息说明启动成功:
可以看到,启动的节点名称是Colonel(在你的实例中,名称可能不同), 并且该节点被选为了单集群的主节点。 可以使用以下命令指定集群和节点名称:
./elasticsearch --cluster.name my_cluster_name --node.name my_node_name
浏览器中输入url:
成功访问elasticsearch。 elasticsearch默认端口9200,如果有需要,该端口可配置。
二.安装mongo-connector
不想在增删改 MongoDB 中数据的同时去增删改 ElasticSearch 中的数据。希望 MongoDB 中数据发送变化时自动同步到 ElasticSearch 中。
最初的解决方案是使用elasticSearch的river来同步数据,但是river已经在elasticSearch的1.5版本中停止维护,在2.0版本完成废弃。 代替的解决方案是使用mongo-connector.
mongo-connector是 MongoDB 官方的开发人员用 Python 写的一个工具,目前支持将 MongoDB 的数据同步到 Solr、ElasticSearch、MongoDB 中,并且支持用户自己扩展。
安装命令:
pip install 'mongo-connector[elastic5]'
验证是否安装成功:
启动mongo-connector,进入mongo-connector目录,输入命令:
mongo-connector -m localhost:27017 -t localhost:9200 -d elastic_doc_manager
假设mongodb集群端口27017,elasticSearch端口9200,并且都安装在本机。
如果启动报错如下:
进入mongo-connector目录,删除oplog.timestamp文件,重新启动即可。
三.安装Ik Analysis
elasticSearch不支持中文分词, 因此必须安装中文分词插件, 建议选用ik analysis。
ik github地址: https://github.com/medcl/elasticsearch-analysis-ik
下载ik master版本(目前master版本支持elasticSearch2.1.1), 解压zip包。
由于下载的是源码,需要进行编译。进入ik解压后的目录,输入命令:
mvn clean package
命令执行完后,生成target文件夹:
进入target/releases目录,将生成的发布包,拷贝并解压到elasticSearch_home/plugins/ik目录下。
将ik_home/config下的ik文件夹copy到elasticSearch_home/config下:
至此,ik analysis 插件安装完成。
四.elasticSearch使用ik分词
以搜索social数据库article表为例:
启动elasticSearch。
创建social index :
curl -XPUT http://192.168.112.128:9200/social
创建article mapping:
curl -XPOST http://192.168.112.128:9200/social/article/_mapping
-d
{
"article": {
"_all": { #表示article所有字段, 执行分词策略
"analyzer": "ik_max_word", #索引时分词器
"search_analyzer": "ik_max_word", #搜索时分词器
"term_vector": "no", #是否开启向量,用于高亮
"store": "false" #是否存储
},
"properties": { #对应article中的字段,执行分词策略
"title": { #title 字段
"type": "string", #字段类型
"store": "no", #是否存储
"term_vector": "with_positions_offsets",#开启向量,用于高亮
"analyzer": "ik_max_word", #索引时分词器
"search_analyzer": "ik_max_word", #搜索时分词器
"include_in_all": "true",
"boost": 8
}
}
}
}
注:ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合;
ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”。
启动mongodb-connector,将数据同步到es.
测试分词搜索:
curl -XPOST http://192.168.112.128:9200/social/article/_search?pretty=true
-d
{
"query" : { "term" : { "title" : "中国" }}
}
搜索结果:
五.elasticSearch集群
elasticSearch集群很简单,下面以两节点集群为例。
在一台虚拟机中启两个elasticSearch实例,端口分别为9200,8200.
修改9200中elasticSearch.yml配置文件:
network.host: 192.168.112.128 #绑定ip地址,提供外网访问的地址
http.port: 9200 #监听9200端口
cluster.name: elasticSearch#集群名称,elasticSearch根据集群名称自动组成集群
node.name: node-1 #节点名称
discovery.zen.minimum_master_nodes: 2 #集群有2个节点
discovery.zen.ping.unicast.hosts: [“192.168.112.128”] #其他节点的ip地址
修改8200中elasticSearch.yml配置文件:
network.host: 192.168.112.128 #绑定ip地址,提供外网访问的地址
http.port: 8200 #监听8200端口
cluster.name: elasticSearch#集群名称,elasticSearch根据集群名称自动组成集群
node.name: node-2 #节点名称
discovery.zen.minimum_master_nodes: 2 #集群有2个节点
discovery.zen.ping.unicast.hosts: [“192.168.112.128”] #其他节点的ip地址
以上配置了一个名叫elasticSearch的集群,集群中有两个节点,分别是node-1、node-2.
六.安装head
集群安装成功之后,需要对集群中的索引数据、运行情况等信息进行查看,索引需要安装一些插件,方面后续工作. 在此,使用head。通过head,可以查看集群几乎所有信息,还能进行简单的搜索查询,观察自动恢复的情况等等。
进入elasticSearch安装目录的bin下,执行命令:
./plugin install mobz/elasticsearch-head
安装完成后(两个节点都要安装)重启elasticSearch,输入地址:
http://192.168.112.128:9200/_plugin/head/
七.参考文档
elasticsearch:https://www.elastic.co/guide/index.html
mongodb中文社区:http://www.mongoing.com/
mongo-connector: https://github.com/mongodb-labs/mongo-connector
ik analysis: https://github.com/medcl/elasticsearch-analysis-ik