分布式搜索引擎-ElasticSearch
1. 如果不用会怎么样
目前搜索的弊端(直接查数据库):
- 空格支持 x
- 拆词查询 ×
- 搜索内容高亮 ×
- 海量数据查询 ×
2. 什么是分布式搜索引擎
2.1 概念
- 首先是搜索引擎
- 其次支持分布式存储与搜索
2.2 Lucene vs Solr vs ElasticSearch
Lucene 是类库:
- 基于 java 的全文搜索引擎,它不是一个应用程序,它是一个代码库或者是一些 api 供我们调用的,本质上就是一个 jar 包,可以直接被引用(导入)到项目中去,然后调用它的 api 进行搜索集成
- 只能使用 java 进行整合,水平扩展集群的话比较复杂
Solr 是基于 Lucene 构建的开源搜索引擎:
- 本质上是对 Lucene 进行了一层封装,是 Apache 的一个开源项目,使用 java 开发的,可以独立部署到 Tomcat 或 jetty 中
- 可以通过 zookeeper 实现集群部署
- 提供分布式索引、负载均衡、自动故障转移恢复,可靠性、可扩展性和容错性都挺好
ElasticSearch 也是基于 Lucene:
分布式搜索引擎
restful 风格接口,支持不同开发语言调用
近实时的搜索服务
支持 PB(1024 T) 级别的搜索
大数据的分析
3. ES 核心术语
- 索引 index: 表
类型 type: 表逻辑类型- 文档 document:行
- 字段 fields: 列
- 映射 mapping 表结构定义
- 近实时 NRT Near real time
- 节点 node 每一台服务器都是一个节点
- shard replica 数据分片与备份
提示: type 已在 ES 7.x 后废弃!
4. 什么是倒排索引
需求:在 30 份文档中找出其中包含“张三”的文档,通常来说我们会根据把文档排序,然后依次遍历来判断当前遍历到的文档中是否包含“张三”,这种查找方式就是根据“文档id” -> “文档内容”的对应关系依次判断文档内容是否包含“张三“,如果存在一张”张三“->”文档”的映射关系,我们可以直接根据张三来获取到满足条件的文档,这就是两种不同的方式进行索引:
正序:根据文档来确定文档中的内容
倒排:文档中的内容到文档的映射,这种就叫做倒排索引
5. 安装 ElasticSearch
下载安装包,传送门
上传安装包到 linux 服务器,目录
/home/software解压文件到目录
/usr/local,tar -zxvf xxx.tares文件目录结构:
- bin:可执行文件,例如启动 es 的脚本文件就在这里
- config:配置问价存放位置
- elasticsearch.yml:核心配置文件
- jvm.options
- log4j2.properties
- role_mapping.yml
- roles.yml
- users
- users_rolse
- jdk:依赖的 java 环境
- lib:依赖的一些类库
- LINCENSE.txt
- logs:日志文件
- modules:跟 es 有关的模块
- NOTICE.txt
- plugins:插件存放位置,包括自定义的
- README.textile
在 es 文件目录中新建 data 目录,数据目录,后续的索引存放位置
修改核心配置文件 elasticsearch.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21# 集群名称
cluster.name: fengjian-elasticsearch
# 节点名称
node.name: es-node1
# 数据路径
path.data: /usr/local/elasticsearch-7.4.2/data
# 日志路径
path.logs: /usr/local/elasticsearch-7.4.2/logs
# 网络地址绑定
network.host: 0.0.0.0
# http 端口号
http.port: 9200
# 集群启动时初始化节点列表
cluster.initial_master_nodes:["es-node1"]修改 jvm.options 配置项
1
2
3
4# Xms 初始化堆空间
# Xmx 最大堆空间
-Xms128m
-Xmx128m启动 ElasticSearch
提示::root 用户是无法启动 es 的,需要创建一个新用户!1
2
3
4
5
6
7
8
9
10
11
12
13# 添加用户
useradd esuser
# 授权 1
chown -R esuser /usr/local/elasticsearch-7.4.2
# 切换用户
su esuser
# 授权 2,elasticsearch.keystore accessDenied!
chown -R esuser:esuser /usr/local/elasticsearch-7.4.2启动,./elasticsearch 或 ./elasticsearch(后台启动)
- 异常 1:max file descriptors [4096] -> [65535]
- 异常 2:max number of threads [3756] -> [4096]
- 异常 3:max virtual memory areas vm.max_map_count [65530] -> [262144]
修改配置 vim /etc/security/limits.conf,文件最后新增如下:
1
2
3
4* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096修改配置文件 vim /etc/sysctl.conf,文件最后新增如下:
1
vm.max_map_count=262145编译文件:sysctl -p
启动成功,浏览器中访问 192.168.12.23:9200 查看信息
关闭的话,jps elasticsearch 查看进程 id 后 kill id
提示:如果在网页上显示localhost未发送任何数据,修改配置文件如下:
1
2
3
4xpack.security.enable: false
xpack.security.http.ssl:
enabled: false
6. 安装 elasticsearch-head 插件
6.1 chrome 中谷歌市场中搜索 elasticsearch 进行安装即可

6.2 head 与 postman 基本操作
版本信息查询

1
2
3
4
5
6
7
8GET http://192.168.X.X:9200/
2. 集群健康查询

```json
GET http://192.168.X.X:9200/_cluster/health新建索引:5 个分片,0 个副本


1
2
3
4
5
6
7
8PUT http://192.168.x.x:9200/index_demo
{
"settings":{
"number_of_shards":5,
"number_of_replicas":0
}
}新建索引:5 个分片,1 个副本,未分配分片有 5 个

1
2
3
4
5
6
7
8PUT http://192.168.x.x:9200/index_123
{
"settings":{
"number_of_shards":5,
"number_of_replicas":1
}
}删除索引:

1
DELETE http://192.168.x.x:9200/index_123查询索引
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27GET http://192.168.x.x:9200/index_temp
{
"index_temp": {
"aliases": {},
"mappings": {},
"settings": {
"index": {
"routing": {
"allocation": {
"include": {
"_tier_preference": "data_content"
}
}
},
"number_of_shards": "3",
"provided_name": "index_temp",
"creation_date": "1676441762678",
"number_of_replicas": "0",
"uuid": "ryzEGgNIS3ycfWfV-lhaOQ",
"version": {
"created": "7160099"
}
}
}
}
}查询全部索引概览
1
2
3
4
5
6
7GET http://192.168.147.132:9200/_cat/indices?v
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open .geoip_databases aqUccqm1RzCvrVBSqK6xfg 1 0 41 36 42.3mb 42.3mb
green open index_demo h7rxnFLDTkOcGreaIBIiEw 5 0 0 0 1.1kb 1.1kb
green open index_temp ryzEGgNIS3ycfWfV-lhaOQ 3 0 0 0 678b 678b
7. mappings 索引数据结构定义
7.1 新建索引并设置 mapping
1 | |
realname:字段名 type:类型 index:是否被索引
| type | 描述 |
|---|---|
| text | 字符串,可被分词 |
| keyword | 字符串,不可被分词 |
| long | 长整型 |
| integer | 整型 |
| float | 浮点型 |
| true | 布尔型 |
| byte | 字节 |
| boolean | 短整型 |
| date | 日期类型 |
| object | 对象类型 |
| double | 浮点数 |
| [1,2,3] | 数组类型 |
index:是否被索引(查询)
keyword:无法被分词
7.2 索引分词
1 | |
7.3 新增 mapping 中 properties
1 | |
8. 文档的基本操作
8.1 新建索引 my_doc,分片 1,副本 0
1 | |
8.2 新增文档信息
1 | |
8.3 删除文档
1 | |
8.4 修改文档-局部修改
1 | |
8.5 修改文档-全量修改
1 | |
8.6 查询文档根据文档 id
1 | |
8.7 查询全部
1 | |
8.8 根据 id 查询,设置 source 查询字段,多个字段逗号隔开
1 | |
8.9 查询全部,设置 source 查询字段,多个逗号隔开
1 | |
8.10 HEAD 方式查询文档,根据状态码判断数据是否存在(节省传输效率)
1 | |
8.11 文档乐观锁控制
番外:mac 多机器克隆修改项
- 安装虚机,启动进入
- ipaddr 搜索 link/ether 拷贝 Mac 地址备用
- 修改 /etc/udev/rules.d/70-persistent0ipoib.rules
- 修改 ACTION==”add” 这一行 address,粘贴 mac 地址,保存
- 修改ip地址,打开 /etc/sysconfig/network-scripts/ifcfg-ens33
- IPADDR 改成网段的任意静态 ip 即可
- HWADDR=”” 改成备用的物理地址
- 重启计算机或者使用 service network restart
- 验证 ipaddr
- 修改虚机名和 secureCRT 连接名
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!