和我一起打造个简单搜索之ElasticSearch集群搭建

时间:2022-08-28 17:32:33

我们所常见的电商搜索如京东,搜索页面都会提供各种各样的筛选条件,比如品牌、尺寸、适用季节、价格区间等,同时提供排序,比如价格排序,信誉排序,销量排序等,方便了用户去找到自己心里理想的商品。

站内搜索对于一个网站几乎是标配,只是搜索的强大与否的区别,有的网站只支持关键词模糊搜索,而淘宝,京东提供了精细的筛选条件,同时支持拼音搜索等更方便的搜索方式。

由于笔者在一家做网络文学的公司工作,所以实现就是以小说为商品的搜索,具体可以参考起点网小说的搜索。

和我一起打造个简单搜索之ElasticSearch集群搭建

如图所示,起点网的搜索提供了关键词搜索和排序条件以及筛选条件,接下来,我们一起来实现这个吧~

环境

本文以及后续 es 系列文章都基于 5.5.3 这个版本的 elasticsearch ,这个版本比较稳定,可以用于生产环境。

系列文章

环境准备之 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/

和我一起打造个简单搜索之ElasticSearch集群搭建

这里需要修改连接地址,为你的 es 所在的 ip:9200。后面集群健康为绿色为正常。

到这里,插件也就安好了。

分词

商品搜索,分词是必不可少的,开源的中文分词最有名的莫过于 IK 分词了,同时为了给用户提供更好的体验,同时配置 pinyin 分词,即输入拼音也可以进行搜索,网上也有对应的分词器,在下文中我们一起来配置分词器。

有疑问?

欢迎来信,给我写信

和我一起打造个简单搜索之ElasticSearch集群搭建的更多相关文章

  1. 和我一起打造个简单搜索之ElasticSearch入门

    本文简单介绍了使用 Rest 接口,对 es 进行操作,更深入的学习,可以参考文末部分. 环境 本文以及后续 es 系列文章都基于 5.5.3 这个版本的 elasticsearch ,这个版本比较稳 ...

  2. 和我一起打造个简单搜索之SpringDataElasticSearch入门

    网上大多通过 java 操作 es 使用的都是 TransportClient,而介绍使用 SpringDataElasticSearch 的文章相对比较少,笔者也是摸索了许久,接下来本文介绍 Spr ...

  3. 和我一起打造个简单搜索之SpringDataElasticSearch关键词高亮

    前面几篇文章详细讲解了 ElasticSearch 的搭建以及使用 SpringDataElasticSearch 来完成搜索查询,但是搜索一般都会有搜索关键字高亮的功能,今天我们把它给加上. 系列文 ...

  4. 和我一起打造个简单搜索之Logstash实时同步建立索引

    用过 Solr 的朋友都知道,Solr 可以直接在配置文件中配置数据库连接从而完成索引的同步创建,但是 ElasticSearch 本身并不具备这样的功能,那如何建立索引呢?方法其实很多,可以使用 J ...

  5. 和我一起打造个简单搜索之IK分词以及拼音分词

    elasticsearch 官方默认的分词插件,对中文分词效果不理想,它是把中文词语分成了一个一个的汉字.所以我们引入 es 插件 es-ik.同时为了提升用户体验,引入 es-pinyin 插件.本 ...

  6. elasticsearch集群搭建实例

    elasticsearch集群搭建实例 下个月又开始搞搜索了,几个月没动这块还好没有落下. 晚上在自己虚拟机上搭建了一个简易搜索集群,分享一下. 操作系统环境: Red Hat 4.8.2-16 el ...

  7. Elasticsearch集群搭建及使用Java客户端对数据存储和查询

    本次博文发两块,前部分是怎样搭建一个Elastic集群,后半部分是基于Java对数据进行写入和聚合统计. 一.Elastic集群搭建 1. 环境准备. 该集群环境基于VMware虚拟机.CentOS ...

  8. elasticsearch 集群搭建及启动常见错误

    1.系统环境 三台服务器(最好是单数台,跟master选举方式有关),确保机器互相ping的通,且都需要装了jdk 8环境,机器IP和 elasticsearch 的节点名称如下: cluster n ...

  9. Es学习第十课,ElasticSearch集群搭建

    前面几课我们已经把ES的基本概念和查询了解了,大家知道ES的核心优势就是天生支持分布式,所以,这课我们专门讲讲怎么搭建实现ES的集群部署. ES分布式原理 1.es分布式概念 主分片(Primary ...

随机推荐

  1. 【原】SDWebImage源码阅读(三)

    [原]SDWebImage源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1.SDWebImageDownloader中的downloadImageWithURL 我们 ...

  2. [Spring] IOC - study

    Spring IOC简单注入例子,本例子使用JUnit进行测试.Spring版本:3.2 项目结构: Spring所需引用的JAR包: Spring XML配置: springContext.xml ...

  3. hdoj 1711 Number Sequence【求字串在母串中第一次出现的位置】

    Number Sequence Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  4. ZeroClipboard插件:兼容各浏览器网页复制功能

    常规利用JS编写的网页复制功能只对IE有效,无法做到兼容其它浏览器,代码如下: function copyToClipBoard(){ var clipBoardContent="&quot ...

  5. IIS7中 ASP.NET授权功能如何实现对静态文件的控制

    IIS7中 ASP.NET授权功能如何实现对静态文件的控制 前序 .net提供了3种用户认证的方式,分别是Windows,Forms,Passport.这几种形式的定义可以在网站根目录下Web.con ...

  6. 二十七、Linux 进程与信号---进程组和组长进程

    27.1 进程组 27.1.1 进程组介绍 进程组为一个或多个进程的集合 进程组可以接受同一终端的各种信号,同一个信号发送进程组等于发送给组中的所有进程 每个进程组有唯一的进程组 ID 进程组的消亡要 ...

  7. 用HTML+CSS画出一个同心圆

    参加web前端校招的同学们经常会遇到这样的面试题:用HTML+CSS画出一个同心圆. 例如: 这道题主要考验的是基础盒模型布局能力和倒圆角属性的巧用. 1.html代码 <body> &l ...

  8. hibernate创建构架

    创建hibernate架构: 注意:需要将所需的架包导进去: 二:Java工程的具体结构: 具体代码如下:hibernate.cfg.xml <!DOCTYPE hibernate-config ...

  9. Linux更改文件权限命令

    chmod命令 1.格式:chmod [-cfvR][--help][--version]mode file 2.参数 1)必要参数 -c 当发送改变时,报告处理信息 -f 错误信息不输出 -R 处理 ...

  10. 130&period; Surrounded Regions&lpar;M&rpar;

    130.Add to List 130. Surrounded Regions Given a 2D board containing 'X' and 'O' (the letter O), capt ...