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

  • ✅ 改成 面试问答版

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

相关推荐
唔661 小时前
Android在局域网中搭建 MQTT服务器 协议V3.1.1
android·运维·服务器
Shadow(⊙o⊙)1 小时前
进程分析—从操作系统到Linux内核深入
linux·运维·服务器·开发语言·网络·c++·后端
疯狂成瘾者11 小时前
服务器的单体和集群
运维·服务器
SWAGGY..16 小时前
Linux系统编程:(二)基础指令详解
linux·运维·服务器
蜡笔婧萱16 小时前
Linux--远程登录服务ssh
linux·服务器·ssh
雾岛心情17 小时前
小铭邮件管理工具箱的界面(公司版)
运维·服务器·工具·o365·小铭邮件工具箱(公司版)
伏加特遇上西柚17 小时前
Loki+Alloy+Grafana日志采集部署
java·linux·服务器·spring boot·grafana·prometheus
zl_dfq17 小时前
服务器设计细节 之 【eventfd、struct stat、stat接口】
服务器
资源分享助手17 小时前
三网H5小游戏战车向前冲搭建教程(Win+Linux)
linux·运维·服务器