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 架构示意图

  • ✅ 改成 面试问答版

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

相关推荐
殷忆枫29 分钟前
Linux 4G模块驱动适配实战:从手动绑定到自动识别
linux·运维·服务器
大黄说说1 小时前
EF Core 避坑指南:查询慢、循环查询、并发更新问题如何解决
java·服务器·数据库
ocean'1 小时前
防火墙策略路由
linux·服务器·数据库
三言老师1 小时前
awk条件筛选日志内容实操
linux·运维·服务器·centos
Elasticsearch1 小时前
缩小 AI 差距:下一代知识访问如何为政府解锁任务成果
elasticsearch
^yi1 小时前
【Linux系统编程】库的制作与使用
linux·运维·服务器
bksczm2 小时前
popen解析
linux·运维·服务器
深念Y2 小时前
技术探索记录 在 Android 手机上运行 One API
android·linux·服务器·智能手机·go·交叉编译·服务
俊哥工具2 小时前
文件批量转换工具 本地运行更快更安全
运维·服务器·django·音视频·tornado
Elastic 中国社区官方博客2 小时前
Elasticsearch:搜索教程 - 语义搜索(三)
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索