Elasticsearch 全文检索服务器入门教程(含 IK 分词器)

一、为什么要用 Elasticsearch?

传统关系型数据库(如 MySQL)在做搜索时存在明显问题:

  • 多字段模糊查询需要 LIKE '%关键词%'

  • 会导致 全表扫描

  • 数据量大时性能急剧下降

**Elasticsearch(简称 ES)**​ 就是为了解决这些问题而生的。


二、什么是 Elasticsearch?

  • Elasticsearch 是一个 基于 Lucene 的全文检索服务器

  • 对外提供 RESTful API

  • 支持分布式、高可用、水平扩展

  • 常用于:

    • 搜索引擎

    • 日志分析(ELK)

    • 商品搜索、内容搜索


三、Elasticsearch 的核心原理

1️⃣ 正排索引(Forward Index)

文档 → 关键词

  • 类似:从字典第 1 页翻到第 N 页

  • 查找效率低

  • MySQL 使用的就是这种方式


2️⃣ 倒排索引(Inverted Index)✅

关键词 → 文档

倒排索引的组成
名称 说明
Term 分词后的关键词(类似字典目录)
Term → Document 关键词与文档之间的映射关系
Document 实际存储的数据
分词特点
  • 不重复(如:手机)

  • 无意义词不参与分词(的、地、得)

  • 不需要搜索的字段不参与分词(如 image)

搜索时,先在 Term 列表中匹配,再定位 Document


四、Elasticsearch 安装(Linux)

1️⃣ 准备环境

复制代码
# 虚拟机内存建议 > 1.5G
free -h

2️⃣ 创建专用用户(⚠ ES 不能用 root 启动)

复制代码
groupadd es
useradd admin
passwd admin
usermod -G es admin

su admin
groups

3️⃣ 授权目录

复制代码
su root
chown -R admin:es /usr/upload
chown -R admin:es /usr/local

4️⃣ 上传并解压 ES

复制代码
su admin
cd /usr/upload
tar -zxvf elasticsearch-6.2.3.tar.gz -C /usr/local

5️⃣ 修改配置文件

📄 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.61.135:9300"]

path.data: /usr/local/elasticsearch-6.2.3/data
path.logs: /usr/local/elasticsearch-6.2.3/logs

http.cors.enabled: true
http.cors.allow-origin: "*"

6️⃣ 修改系统参数(非常重要)

(1)文件句柄数
复制代码
vim /etc/security/limits.conf

* soft nofile 65536
* hard nofile 65536

(2)虚拟内存
复制代码
vim /etc/sysctl.conf

vm.max_map_count=655360

sysctl -p

7️⃣ 启动与关闭

复制代码
cd /usr/local/elasticsearch-6.2.3/bin

# 启动
./elasticsearch

# 后台启动
./elasticsearch -d

查看进程:

复制代码
ps -ef | grep elasticsearch
kill -9 PID

✅ 访问测试:

复制代码
http://192.168.61.135:9200/

五、Elasticsearch 基础操作

1️⃣ Index 管理

✅ 创建索引
复制代码
PUT /java06
{
  "settings": {
    "number_of_shards": 2,
    "number_of_replicas": 0
  }
}

⚠ 单机环境 replica 必须为 0


✅ 修改副本数
复制代码
PUT /java06/_settings
{
  "number_of_replicas": 1
}

❗ 主分片数量一旦创建 不能修改


✅ 删除索引
复制代码
DELETE /java06

2️⃣ Type 映射(Mapping)

复制代码
POST /java06/_mapping/course
{
  "properties": {
    "name": {
      "type": "text"
    },
    "description": {
      "type": "text"
    },
    "studymodel": {
      "type": "keyword"
    }
  }
}

3️⃣ Document 操作

✅ 新增文档
复制代码
POST /java06/course/1
{
  "name": "Python 从入门到放弃",
  "description": "人生苦短,我用 Python",
  "studymodel": "201002"
}

✅ 修改文档
复制代码
PUT /java06/course/1
{
  "name": "Python 从入门到精通"
}

✅ 删除文档
复制代码
DELETE /java06/course/1

✅ 查询文档
复制代码
GET /java06/course/1

六、IK 分词器

1️⃣ 安装 IK

复制代码
# 解压后上传到 plugins 目录
/usr/local/elasticsearch-6.2.3/plugins/ik

重启 ES。


2️⃣ 自定义词典

📄 IKAnalyzer.cfg.xml

复制代码
<entry key="ext_dict">main.dic</entry>
<entry key="ext_stopwords">stopword.dic</entry>
文件 作用
main.dic 扩展词典(如:奥里给)
stopword.dic 停用词(的、地、得、a、an、the)

⚠ 文件编码必须是 UTF-8


3️⃣ 分词模式对比

模式 说明 使用场景
ik_smart 粗粒度 搜索
ik_max_word 细粒度 写入

七、总结

✅ Elasticsearch 通过 倒排索引​ 实现高效搜索

✅ 安装时注意 不能用 root 启动

✅ 主分片数不可修改

✅ IK 分词器是中文搜索的关键


如果你愿意,我可以再帮你:

  • ✅ 起一个 CSDN 爆款标题

  • ✅ 加一版 目录导航

  • ✅ 给你配一张 ES 架构示意图

  • ✅ 改成 面试问答版

你可以直接说:"帮我起个标题" ​ 或 **"我要面试版"**​ 😊

相关推荐
snow@li38 分钟前
Java:Java 服务器(Web 容器 / Servlet 容器)完整工作清单
java·服务器·前端
JL151 小时前
Agent工程-为什么Agent必须有观测和Tracing
服务器·网络·人工智能·安全
神州世通1 小时前
IP Office内置外显卡兼容性说明
服务器·网络·tcp/ip
ylscode1 小时前
CVE-2026-31694 漏洞深度分析:Linux 内核 FUSE 组件存在本地提权风险,普通用户可直取 root 权限
linux·运维·服务器
frank00600712 小时前
Rocky 9.8设置本地yum源
服务器
土星云SaturnCloud3 小时前
边缘计算在储气库调峰智能管控中的应用:架构设计与技术解析
服务器·人工智能·ai·边缘计算
Elasticsearch4 小时前
开发者关系新闻通讯 — 2026 年 6 月
elasticsearch
峥嵘life4 小时前
Repo 常用操作手册
大数据·elasticsearch·搜索引擎
编程令我快乐4 小时前
windows单次传linux文件太大
linux·运维·服务器
NiceCloud喜云4 小时前
Claude Code 应用内浏览器任务怎么写验收清单
服务器·人工智能·ai