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

  • ✅ 改成 面试问答版

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

相关推荐
博客-小覃18 小时前
Zabbix之华为交换机的日志记录信息操作详细教程
服务器·网络·华为·zabbix
stolentime18 小时前
FreeDomain 本地开发环境快速搭建指南
运维·服务器·网络
向量引擎18 小时前
从零起步,如何打造专属向量引擎 API 中转工作流?
java·服务器·前端
z2005093019 小时前
【Linux学习】Linux中的进程程序替换
linux·服务器·学习
Elastic 中国社区官方博客19 小时前
我们如何在 Elasticsearch Serverless 上将向量搜索吞吐量提升一倍
大数据·数据库·人工智能·elasticsearch·搜索引擎·云原生·serverless
lihao lihao20 小时前
软硬链接
linux·运维·服务器
TOWE technology20 小时前
智能安防监控系统如何做好防雷?——视频信号SPD综合应用方案解析
运维·服务器·防雷产品·信号保护·信号防雷·spd
雪度娃娃20 小时前
存储器层次结构——磁盘硬盘存储
服务器·网络·数据库·计算机组成原理
大明者省21 小时前
IIS 端口绑定正常访问的原理说明与常见误区澄清
运维·服务器·笔记
tedcloud12321 小时前
ai-engineering-from-scratch部署教程:从零搭建AI应用环境
服务器·前端·人工智能·系统架构·edge