Elasticsearch:原理、安装与基本使用
一、为什么要用 Elasticsearch?
在传统 MySQL 中:
-
`LIKE '%xxx%'` 无法走索引
-
多字段模糊搜索需要多次全表扫描
-
数据量一大,性能直线下降
**Elasticsearch(ES)优势:**
-
基于 **倒排索引**
-
支持 **全文检索**
-
分布式、高并发、近实时搜索
二、Elasticsearch 是什么?
Elasticsearch 是一个 **基于 Lucene 的分布式全文检索引擎**。
✅ 对外提供 RESTful API
✅ 数据格式为 JSON
✅ 常用于:搜索、日志分析、大数据分析
三、倒排索引原理(重点)
1、 正排索引 vs 倒排索引
| 类型 | 映射关系 | 类比 |
|----|----|----|
| 正排索引 | 文档 → 关键词 | 翻书找内容 |
| 倒排索引 | 关键词 → 文档 | 查字典目录 |
2、 倒排索引结构
Term(分词)
├── Doc1
├── Doc2
└── Doc3
3、 分词规则
-
✅ 不重复
-
✅ 停用词不参与(的、地、得)
-
✅ 不需要搜索的字段不参与(如图片路径)
**搜索是从 Term 列表匹配,而不是全文扫描**
四、Elasticsearch 安装(Linux)
1、 环境准备
-
虚拟机内存 ≥ **1.5G**
-
禁止使用 root 启动 ES
2、 创建用户
bash
groupadd es
useradd admin
usermod -G es admin
chown -R admin:es /usr/local/elasticsearch*
3、 核心配置
`elasticsearch.yml`
cluster.name: power_shop
node.name: power_shop_node_1
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: ["192.168.79.135:9300"]
path.data: data
path.logs: logs
http.cors.enabled: true
五、系统参数调优(必做)
limits.conf
soft nofile 65536
hard nofile 65536
sysctl.conf
conf
vm.max_map_count=655360
sysctl -p
六、ES 基本操作(RESTful)
1、 Index 管理
创建索引
json
PUT /java06
{
"settings": {
"number_of_shards": 2,
"number_of_replicas": 0
}
}
**单节点环境 replicas 必须为 0**
修改副本数
json
PUT /java06/_settings
{
"number_of_replicas": 1
}
2、 Type & Mapping
json
POST /java06/_mapping/course
{
"properties": {
"name": { "type": "text" }
}
}
3、 Document CRUD
json
POST /java06/course/1
{
"name": "Python从入门到放弃"
}
http
GET /java06/course/1
DELETE /java06/course/1
七、IK 分词器
1、安装
解压 IK 到:
/usr/local/elasticsearch-6.2.3/plugins/ik
2、自定义词典
-
`main.dic`:扩展词(奥里给)
-
`stopword.dic`:停用词(的、地、得)
**必须 UTF-8 编码**
3、分词模式
| 模式 | 场景 |
|----|----|
| ik_smart | 搜索 |
| ik_max_word | 索引写入 |
八、总结
✅ ES 核心是倒排索引
✅ Linux 安装必须调系统参数
✅ 单节点 replicas = 0
✅ IK 分词器是中文搜索必备