和我一起打造个简单搜索之ElasticSearch集群搭建
我们所常见的电商搜索如京东,搜索页面都会提供各种各样的筛选条件,比如品牌、尺寸、适用季节、价格区间等,同时提供排序,比如价格排序,信誉排序,销量排序等,方便了用户去找到自己心里理想的商品。
站内搜索对于一个网站几乎是标配,只是搜索的强大与否的区别,有的网站只支持关键词模糊搜索,而淘宝,京东提供了精细的筛选条件,同时支持拼音搜索等更方便的搜索方式。
由于笔者在一家做网络文学的公司工作,所以实现就是以小说为商品的搜索,具体可以参考起点网小说的搜索。

如图所示,起点网的搜索提供了关键词搜索和排序条件以及筛选条件,接下来,我们一起来实现这个吧~
环境
本文以及后续 es 系列文章都基于 5.5.3 这个版本的 elasticsearch ,这个版本比较稳定,可以用于生产环境。
系列文章
- 一、和我一起打造个简单搜索之ElasticSearch集群搭建
- 二、和我一起打造个简单搜索之ElasticSearch入门
- 三、和我一起打造个简单搜索之IK分词以及拼音分词
- 四、和我一起打造个简单搜索之Logstash实时同步建立索引
- 五、和我一起打造个简单搜索之SpringDataElasticSearch入门
- 六、和我一起打造个简单搜索之SpringDataElasticSearch关键词高亮
- ...
环境准备之 ES 集群搭建
master 配置
## 下载 elasticsearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.3.tar.gz
## 创建目录
mkdir /usr/local/es
## 解压文件到 es 目录
tar -xvf elasticsearch-5.5.3.tar.gz -C /usr/local/es
## 修改 es 的配置文件
cd /usr/local/es/elasticsearch-5.5.3/config
vim elasticsearch.yml
## 在文件末尾增加
http.cors.enabled: true
http.cors.allow-origin: "*"
cluster.name: es-search
node.name: slave1
node.master: true
network.host: 0.0.0.0
## 修改 es 的 jvm 设置,如果不调节,可能启动一个 master, slave 就没足够内存来启动了
vim jvm.options
修改
-Xms2g
-Xmx2g
为
-Xms512m
-Xmx512m
注意,如果是线上,这个内存就不要修改了,使用默认的内存 2G 即可。
slave 配置
## 准备搭建一个伪集群 1个master + 2个slave
cd /usr/local/es
## 将目录重命名为 master
[root@localhost es]# mv elasticsearch-5.5.3/ master
##拷贝两份为 slave
[root@localhost es]# cp -r master/ slave1
[root@localhost es]# cp -r master/ slave2
## 修改两个 slave 的配置
### 修改 slave1 的配置
[root@localhost es]# vim slave1/config/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"
cluster.name: es-search
node.name: slave1
## 注意 http 端口不要设置一样,以免冲突
http.port: 8200
#node.master: true
network.host: 0.0.0.0
### 修改 slave2 的配置
[root@localhost es]# vim slave2/config/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"
cluster.name: es-search
node.name: slave2
## 注意 http 端口不要设置一样,以免冲突
http.port: 7200
#node.master: true
network.host: 0.0.0.0
添加用户
## 启动 es 不能使用 root 用户,所以先需要增加新的用户
[root@localhost es]# adduser esuser
[root@localhost es]# chown -R esuser /usr/local/es/
## 切换到 esuser 用户
[root@localhost es]# su esuser
[esuser@localhost es]$ chmod 777 /usr/local/es/
启动集群中的 master
# 先测试能否正常启动
[esuser@localhost es]$ /usr/local/es/master/bin/elasticsearch
# 查看打印的日志信息
[2018-09-02T01:45:21,125][INFO ][o.e.g.GatewayService ] [master] recovered [0] indices into cluster_state
[2018-09-02T01:45:21,138][INFO ][o.e.h.n.Netty4HttpServerTransport] [master] publish_address {127.0.0.1:9200}, bound_addresses {127.0.0.1:9200}
[2018-09-02T01:45:21,138][INFO ][o.e.n.Node ] [master] started
## 启动失败提示
ERROR: [2] bootstrap checks failed
[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]
## 切换到 root 用户,修改系统配置
su root
# 输入登录密码
vim /etc/security/limits.conf
## 在文件末尾增加,不要去掉前面的 * 号
* soft nofile 300000
* hard nofile 300000
* soft nproc 102400
* soft memlock unlimited
* hard memlock unlimited
## 对 sysctl.conf 文件 进行修改
echo "vm.max_map_count=262144" > /etc/sysctl.conf
sysctl -p
## 修改完毕,切换回 esuser 用户身份
su esuser
## 尝试启动
[esuser@localhost es]$ /usr/local/es/master/bin/elasticsearch
# 提示已经启动成功了
[2018-09-02T02:10:14,285][INFO ][o.e.h.n.Netty4HttpServerTransport] [master] publish_address {192.168.199.192:9200}, bound_addresses {[::]:9200}
[2018-09-02T02:10:14,285][INFO ][o.e.n.Node ] [master] started
[2018-09-02T02:10:14,289][INFO ][o.e.g.GatewayService ] [master] recovered [0] indices into cluster_state
验证启动
使用浏览器访问 http://ip:9200 ip 替换你的 ip 地址,我的是 http://192.168.199.192:9200
浏览器响应内容
{
name: "master",
cluster_name: "es-search",
cluster_uuid: "JoNUMEKFS06NHNS7p3bdWg",
version: {
number: "5.5.3",
build_hash: "9305a5e",
build_date: "2017-09-07T15:56:59.599Z",
build_snapshot: false,
lucene_version: "6.6.0"
},
tagline: "You Know, for Search"
}
注意:如果无法访问,请关闭防火墙
后台守护进程启动 es 集群
前文是直接启动,如果按下 ctrl + c 或者结束 ssh 会话,es 会立即停止退出,因此需要通过守护进程后台启动
[esuser@localhost es]$ /usr/local/es/master/bin/elasticsearch -d
## 查看是否启动成功
ps -ef | grep elasticsearch
## 正常可以看到一个 elasticsearch 进程
## 如前文一样,分别测试两个 slave 是否可以正常启动
### 测试slave1
[esuser@localhost es]$ /usr/local/es/slave1/bin/elasticsearch -d
### 浏览器访问 http://ip:8200,响应为:
{
"name":"slave1",
"cluster_name":"es-search",
"cluster_uuid":"JoNUMEKFS06NHNS7p3bdWg",
"version":{
"number":"5.5.3",
"build_hash":"9305a5e",
"build_date":"2017-09-07T15:56:59.599Z",
"build_snapshot":false,
"lucene_version":"6.6.0"
},
"tagline":"You Know, for Search"
}
### 测试slave2
[esuser@localhost es]$ /usr/local/es/slave2/bin/elasticsearch -d
### 浏览器访问 http://ip:8200,响应为:
{
name: "slave2",
cluster_name: "es-search",
cluster_uuid: "JoNUMEKFS06NHNS7p3bdWg",
version: {
number: "5.5.3",
build_hash: "9305a5e",
build_date: "2017-09-07T15:56:59.599Z",
build_snapshot: false,
lucene_version: "6.6.0"
},
tagline: "You Know, for Search"
}
至此完成了 es 集群(伪)的搭建。
环境准备之 elasticsearch head 安装
为了方便我们观察调试,安装这个 es 插件。
安装步骤参考官方 github
# 把插件安装到 es 目录下
cd /usr/local/es/
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
npm run start
在 npm install 这一步,由于国内网络环境的原因,可能会失败,可以npm 换源重试。
启动完成后,浏览器访问 http://ip:9100,我的是 http://192.168.199.192:9100/

这里需要修改连接地址,为你的 es 所在的 ip:9200。后面集群健康为绿色为正常。
到这里,插件也就安好了。
分词
商品搜索,分词是必不可少的,开源的中文分词最有名的莫过于 IK 分词了,同时为了给用户提供更好的体验,同时配置 pinyin 分词,即输入拼音也可以进行搜索,网上也有对应的分词器,在下文中我们一起来配置分词器。
有疑问?
欢迎来信,给我写信
和我一起打造个简单搜索之ElasticSearch集群搭建的更多相关文章
- 和我一起打造个简单搜索之ElasticSearch入门
本文简单介绍了使用 Rest 接口,对 es 进行操作,更深入的学习,可以参考文末部分. 环境 本文以及后续 es 系列文章都基于 5.5.3 这个版本的 elasticsearch ,这个版本比较稳 ...
- 和我一起打造个简单搜索之SpringDataElasticSearch入门
网上大多通过 java 操作 es 使用的都是 TransportClient,而介绍使用 SpringDataElasticSearch 的文章相对比较少,笔者也是摸索了许久,接下来本文介绍 Spr ...
- 和我一起打造个简单搜索之SpringDataElasticSearch关键词高亮
前面几篇文章详细讲解了 ElasticSearch 的搭建以及使用 SpringDataElasticSearch 来完成搜索查询,但是搜索一般都会有搜索关键字高亮的功能,今天我们把它给加上. 系列文 ...
- 和我一起打造个简单搜索之Logstash实时同步建立索引
用过 Solr 的朋友都知道,Solr 可以直接在配置文件中配置数据库连接从而完成索引的同步创建,但是 ElasticSearch 本身并不具备这样的功能,那如何建立索引呢?方法其实很多,可以使用 J ...
- 和我一起打造个简单搜索之IK分词以及拼音分词
elasticsearch 官方默认的分词插件,对中文分词效果不理想,它是把中文词语分成了一个一个的汉字.所以我们引入 es 插件 es-ik.同时为了提升用户体验,引入 es-pinyin 插件.本 ...
- elasticsearch集群搭建实例
elasticsearch集群搭建实例 下个月又开始搞搜索了,几个月没动这块还好没有落下. 晚上在自己虚拟机上搭建了一个简易搜索集群,分享一下. 操作系统环境: Red Hat 4.8.2-16 el ...
- Elasticsearch集群搭建及使用Java客户端对数据存储和查询
本次博文发两块,前部分是怎样搭建一个Elastic集群,后半部分是基于Java对数据进行写入和聚合统计. 一.Elastic集群搭建 1. 环境准备. 该集群环境基于VMware虚拟机.CentOS ...
- elasticsearch 集群搭建及启动常见错误
1.系统环境 三台服务器(最好是单数台,跟master选举方式有关),确保机器互相ping的通,且都需要装了jdk 8环境,机器IP和 elasticsearch 的节点名称如下: cluster n ...
- Es学习第十课,ElasticSearch集群搭建
前面几课我们已经把ES的基本概念和查询了解了,大家知道ES的核心优势就是天生支持分布式,所以,这课我们专门讲讲怎么搭建实现ES的集群部署. ES分布式原理 1.es分布式概念 主分片(Primary ...
随机推荐
- 2016-2017-2 20155326实验二《Java面向对象程序设计》实验报告
2016-2017-2 20155326实验二<Java面向对象程序设计>实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉 ...
- Eclipse配置maven web项目问题总结
clipse创建Maven结构的web项目的时候选择Artifact Id为maven-artchetype-webapp,点击finish之后,一般会遇到如下问题 1. The superclass ...
- Android-Java-面向对象与面向过程的简单理解
支持面向过程的语言有:C Basic 等语言: 支持面向对象的语言有:C++ Java C# 等语言: 面向过程:操作的是行为/功能: 面向对象:操作的是对象,而对象里面有功能行为,所以可以指定 ...
- 最全面的Git 使用规范装逼指南[转载]
<!DOCTYPE html> <script type="text/javascript"> window.logs = { pagetime: {} } ...
- CentOS 7.0 Firewall防火墙配置
启动停止 获取firewall状态 systemctl status firewalld.service firewall-cmd --state 开启停止防火墙 开机启动:systemctl ena ...
- 自定义Chrome缩放比例
我想要设置Chrome页面缩放为120%,但是Chrome只提供110% 125%,根本没有让我舒心的缩放比例. 强迫症发作,谷歌了半天没有一个很好的解决方案. 虽然也有不少第三方扩展可以自定义缩放比 ...
- 【C#】转一篇MSDN杂志文:ASP.NET Pipeline: Use Threads and Build Asynchronous Handlers in Your Server-Side Web Code
序:这是一篇发表在2003年6月刊的MSDN Magazine的文章,现在已经不能在线阅读,只提供chm下载.讲的是异步请求处理那些事,正是我上一篇博文涉及的东西(BTW,事实上这篇杂志阐述了那么搞然 ...
- sql server 查看列备注、类型、字段大小
select 列名 = a.name ,类型 = c.name ,长度 = columnproperty(a.id,a.name,'precision') ,备注 = g.value from sys ...
- file-loader引起的html-webpack-plugin坑
引言 最近,我们的一个后台系统要改版为基于react + redux + react-router + ant-design 技术栈,切换到当下比较新的技术来实现后台系统:在项目实施过程中,选择了基于 ...
- Linux 安装JavaEE环境之Tomcat安装笔记
1.先用xftp将tomcat的压缩包上传到 /opt/ 2.在/usr/local/下使用命令mkdir tomcat 创建tomcat目录 将apache-tomcat-7.0.70.tar.gz ...