和我一起打造个简单搜索之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
[[email protected] es]# mv elasticsearch-5.5.3/ master

##拷贝两份为 slave
[[email protected] es]# cp -r master/ slave1
[[email protected] es]# cp -r master/ slave2

## 修改两个 slave 的配置

### 修改 slave1 的配置
[[email protected] 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 的配置
[[email protected] 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 用户,所以先需要增加新的用户

[[email protected] es]# adduser esuser
[[email protected] es]# chown -R esuser /usr/local/es/

## 切换到 esuser 用户
[[email protected] es]# su esuser
[[email protected] es]$ chmod 777 /usr/local/es/

启动集群中的 master

# 先测试能否正常启动
[[email protected] 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

## 尝试启动
[[email protected] 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 会立即停止退出,因此需要通过守护进程后台启动


[[email protected] es]$ /usr/local/es/master/bin/elasticsearch -d

## 查看是否启动成功
ps -ef | grep elasticsearch

## 正常可以看到一个 elasticsearch 进程

## 如前文一样,分别测试两个 slave 是否可以正常启动

### 测试slave1
[[email protected] 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
[[email protected] 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 分词,即输入拼音也可以进行搜索,网上也有对应的分词器,在下文中我们一起来配置分词器。

有疑问?

欢迎来信,给我写信

原文地址:https://www.cnblogs.com/vcmq/p/9966664.html

时间: 2024-11-05 17:23:11

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

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

用过 Solr 的朋友都知道,Solr 可以直接在配置文件中配置数据库连接从而完成索引的同步创建,但是 ElasticSearch 本身并不具备这样的功能,那如何建立索引呢?方法其实很多,可以使用 Java API 的方式建立索引,也可以通过 Logstash 的插件 logstash-input-jdbc 完成,今天来探讨下如何使用 logstash-input-jdbc 完成全量同步以及增量同步. 环境 本文以及后续 es 系列文章都基于 5.5.3 这个版本的 elasticsearch

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

网上大多通过 java 操作 es 使用的都是 TransportClient,而介绍使用 SpringDataElasticSearch 的文章相对比较少,笔者也是摸索了许久,接下来本文介绍 SpringDataElasticSearch 的 api 使用,更加方便的进行查询. 系列文章 一.和我一起打造个简单搜索之ElasticSearch集群搭建 二.和我一起打造个简单搜索之ElasticSearch入门 三.和我一起打造个简单搜索之IK分词以及拼音分词 四.和我一起打造个简单搜索之Log

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

前面几篇文章详细讲解了 ElasticSearch 的搭建以及使用 SpringDataElasticSearch 来完成搜索查询,但是搜索一般都会有搜索关键字高亮的功能,今天我们把它给加上. 系列文章 一.和我一起打造个简单搜索之ElasticSearch集群搭建 二.和我一起打造个简单搜索之ElasticSearch入门 三.和我一起打造个简单搜索之IK分词以及拼音分词 四.和我一起打造个简单搜索之Logstash实时同步建立索引 五.和我一起打造个简单搜索之SpringDataElasti

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

elasticsearch 官方默认的分词插件,对中文分词效果不理想,它是把中文词语分成了一个一个的汉字.所以我们引入 es 插件 es-ik.同时为了提升用户体验,引入 es-pinyin 插件.本文介绍这两个 es 插件的安装. 环境 本文以及后续 es 系列文章都基于 5.5.3 这个版本的 elasticsearch ,这个版本比较稳定,可以用于生产环境. ik 分词器 和 pinyin 分词器在 github 仓库可以找到,注意版本与 elasticsearch 的版本需要对应,本文使

elasticsearch集群搭建实例

下个月又开始搞搜索了,几个月没动这块还好没有落下. 晚上在自己虚拟机上搭建了一个简易搜索集群,分享一下. 操作系统环境: Red Hat 4.8.2-16 elasticsearch : elasticsearch-1.4.1 集群搭建方式: 一台虚拟机上2个节点. 集群存放路径:/export/search/elasticsearch-cluster 必备环境:  java运行环境 集群搭建实例展示: 1. 解压tar包,创建集群节点 #进入到集群路径 [[email protected] e

ElasticSearch集群搭建

一.前言 先介绍ElasticSearch的几个核心概念. 集群(cluster): 一个集群就是由一个或多个节点组织在一起,它们共同持有你整个的数据,并一起提供索引和搜索功能.一个集群由一个唯一的名字标识,这个名字默认就是"elasticsearch".这个名字是重要的,因为一个节点只能通过指定某个集群的名字,来加入这个集群. 节点(node): 一个节点是你集群中的一个服务器,作为集群的一部分,它存储你的数据,参与集群的索引和搜索功能.和集群类似,一个节点也是由一个名字来标识的,默

1:elasticsearch集群搭建

PS:这里使用的ES版本为1.3.0 ES的集群搭建比较简单,主要是修改conf/elasticsearch.yml文件 ##################### Elasticsearch Configuration Example ##################### # This file contains an overview of various configuration settings, # targeted at operations staff. Applicati

基于swarm的elasticsearch集群搭建

es集群构建: 1.安装head插件: for Elasticsearch 5.x: docker run -p 9100:9100 mobz/elasticsearch-head:5 ( docker run -p 9100:9100 10.211.121.26/library/elasticsearch-head ) 出现问题 head主控页面是可以显示的,但是显示连接失败 "集群健康值: 未连接" 解决方案 修改elasticsearch.yml文件 vim $ES_HOME$/

elasticsearch 集群搭建

需要编辑的文件是config/elasticsearch.yml文件 需要配置的项目有: # Use a descriptive name for your cluster: # cluster.name: Hadoop # # ------------------------------------ Node ------------------------------------ # # Use a descriptive name for the node: # #node.name: n