es的自定义词典和停用词

在 Elasticsearch 中,自定义词典是优化分词效果的核心手段,尤其适用于中文或专业领域的文本处理。以下是关于 ES 自定义词典的完整指南:

  1. 为什么需要自定义词典?
    默认分词不足:
    ES 自带的分词器(如 Standard Analyzer)对中文处理效果差(按字拆分),IK 分词器虽支持中文,但默认词库可能缺少特定领域词汇(如 "大模型""元宇宙")。
    业务需求:
    确保专业术语不被拆分(如 "机器学习" 不应拆分为 "机器""学习");
    识别品牌名、人名、地名等专有名词;
    处理网络热词或缩写(如 "yyds""内卷")。
  2. 如何配置自定义词典?
    以 IK 分词器为例,步骤如下:
    步骤 1:创建词典文件
    在 ES 安装目录下的 plugins/ik/config 目录中创建自定义词典文件(如 custom/mydict.dic):
    步骤 2:修改配置文件
    编辑 plugins/ik/config/IKAnalyzer.cfg.xml,添加自定义词典路径:
bash 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
	<comment>IK Analyzer 扩展配置</comment>
	<!--用户可以在这里配置自己的扩展字典 -->
	<entry key="ext_dict">custom/mydic.dic</entry>
	 <!--用户可以在这里配置自己的扩展停止词字典-->
	<entry key="ext_stopwords">custom/stopwords.dic</entry>
	<!--用户可以在这里配置远程扩展字典 -->
	<!-- <entry key="remote_ext_dict">words_location</entry> -->
	<!--用户可以在这里配置远程扩展停止词字典-->
	<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

路径规则:

使用 正斜杠 / 或分号 ; 分隔多个词典;

路径相对于 ik/config 目录(如 custom/mydict.dic 对应实际路径 plugins/ik/config/custom/mydict.dic)

我的myidct.dic自定义词典为:

bash 复制代码
有限公司
有限责任公司
人工智能
许家印
前首富

步骤 3:重启 ES 并验证

bash 复制代码
POST http://localhost:9200/_analyze
{
  "analyzer": "ik_smart",
  "text": "中国前首富许家印"
}

结果:

bash 复制代码
{
    "tokens": [
        {
            "token": "中国",
            "start_offset": 0,
            "end_offset": 2,
            "type": "CN_WORD",
            "position": 0
        },
        {
            "token": "前首富",
            "start_offset": 2,
            "end_offset": 5,
            "type": "CN_WORD",
            "position": 1
        },
        {
            "token": "许家印",
            "start_offset": 5,
            "end_offset": 8,
            "type": "CN_WORD",
            "position": 2
        }
    ]
}

去掉mydic.dic里面的内容,重启es,不采用自定义词典后的分词效果如下

bash 复制代码
{
    "tokens": [
        {
            "token": "中国",
            "start_offset": 0,
            "end_offset": 2,
            "type": "CN_WORD",
            "position": 0
        },
        {
            "token": "前",
            "start_offset": 2,
            "end_offset": 3,
            "type": "CN_CHAR",
            "position": 1
        },
        {
            "token": "首富",
            "start_offset": 3,
            "end_offset": 5,
            "type": "CN_WORD",
            "position": 2
        },
        {
            "token": "许",
            "start_offset": 5,
            "end_offset": 6,
            "type": "CN_CHAR",
            "position": 3
        },
        {
            "token": "家",
            "start_offset": 6,
            "end_offset": 7,
            "type": "CN_CHAR",
            "position": 4
        },
        {
            "token": "印",
            "start_offset": 7,
            "end_offset": 8,
            "type": "CN_CHAR",
            "position": 5
        }
    ]
}

-----------------------------------------------手动分割线---------------------------------------------------

在 Elasticsearch 中,自定义词典和停用词是两种功能完全相反的配置,分别用于增强分词精度和过滤冗余信息。以下是核心区别和应用场景:

  1. 核心区别对比
  2. 示例对比

场景:分析文本 "我爱自然语言处理"
自定义词典配置:

bash 复制代码
<entry key="ext_dict">custom/nlp.dic</entry>

nlp.dic 内容:

bash 复制代码
自然语言处理

分词结果:

bash 复制代码
["我", "爱", "自然语言处理"]  // "自然语言处理"被视为一个整体

停用词配置:

bash 复制代码
<entry key="ext_stopwords">stopwords.dic</entry>

stopwords.dic 内容:

bash 复制代码
我
的
了

分词结果:

bash 复制代码
["爱", "自然", "语言", "处理"]  // "我"被过滤
  1. 适用场景
相关推荐
网站优化(SEO)专家2 小时前
SEO核心算法拆解:网站排名快速提升的武林秘籍!
算法·搜索引擎·网站排名·核心算法
hyf3266335 小时前
泛程序哪有想象中难!小白跟着走一遍就全懂
前端·爬虫·搜索引擎·seo·蜘蛛池
一次旅行11 小时前
【效率秘籍】Shell 函数+别名组合拳,让 80% 的重复命令变 1 个字母
大数据·elasticsearch·搜索引擎
暖和_白开水11 小时前
数据分析agent(九):es_client_manager.py 和分词器ik_max_word问题
elasticsearch·数据分析·c#
码农学院11 小时前
Elasticsearch构建汽车零配件智能搜索与匹配系统
大数据·elasticsearch·汽车
AI探索先锋1 天前
AMD 2nm 芯片炸裂、欧洲首家人形机器人独角兽诞生、AI Agent 互联标准打响:10 条信号看懂产业变局|今日科技 AI 机器人快讯
大数据·人工智能·深度学习·搜索引擎·机器人
2601_955760071 天前
如何用 Claude Opus 5 API 批量扩展长尾关键词和文章选题
前端·python·搜索引擎
Litluecat1 天前
2026年7月21日科技热点新闻
人工智能·科技·搜索引擎·新闻·每日
Elastic 中国社区官方博客1 天前
不到 5 分钟完成本地部署:Jina embedding 模型现已支持本地部署
大数据·人工智能·elasticsearch·搜索引擎·embedding·jina
二进制流水搬运工1 天前
入职第一天拉了23个仓库,我写了个脚本解放双手
大数据·elasticsearch·搜索引擎