
分词器的执行流程Character Filter字符过滤器 → Tokenizer切词器 → Token Filter词条过滤器字符过滤器Character Filter操作对象原始完整字符串还没切词工作字符层面替换、删除、清洗。例子去掉 HTML 标签、全角转半角、正则替换。切词器Tokenizer操作对象经过字符过滤器处理后的字符串工作把连续字符串切割成一个个独立的token同时生成term词条文本position词位置match_phrase 依赖start_offset /end_offset字符起止偏移例如 standard tokenizer 按单词边界切分。词条过滤器Token Filter操作对象已经切好的单个 token工作对每个 token 里面的 term 做修改、删除、新增不会改变 token 的 position 和 offset。常见操作小写转换、去停用词、同义词、词干提取。文本正常化把token做标准化处理消除无关差异让语义相同、写法不同的文本分词后得到一样的 term。常见的正常化操作standard 分词器自带大小写转换全部转为小写Xiaomi→xiaomi这样match搜Xiaomi和xiaomi能命中同一文档。去掉变音符号重音café→cafe法语、西班牙语的重音符号剥离。删除停用词可选stop token filter英文the、a、is这类无实义虚词直接移除减少索引体积。同义词替换synonym filter手机、移动电话→ 统一映射成同一个 term。去除多余符号、特殊字符、空白自定义分词器在settings里面定义analyzer由三部分组成char_filter可选 tokenizer必须只能 1 个 filter可选token filter# 自定义分词器支持字符映射和同义词过滤PUTmy_index{settings:{analysis:{char_filter:{my_mapping:{type:mapping,mappings:[$ yuan, youjian]}},filter:{my_synonym:{type:synonym,synonyms:[xiaomi,pianyi,phone,dianhua]}},analyzer:{my_analyzer:{type:custom,char_filter:[my_mapping],tokenizer:standard,filter:[lowercase,my_synonym]}}}}}# 测试GET/my_index/_analyze{text:[xiaomi shouji $,phone],analyzer:my_analyzer}其中字符通过映射转化$ yuanphone新增了近义词dianhua。分词器插件中文使用默认的standard分词器文本将被拆分成单个字符中文一般使用ik分词器。ik分词器插件安装插件版本需和es版本对应下载地址https://release.infinilabs.com/analysis-ik/stable/得到对应版本的下载地址后在容器内执行./bin/elasticsearch-plugin install https://release.infinilabs.com/analysis-ik/stable/elasticsearch-analysis-ik-8.15.0.zip安装后重启es测试添加扩展词典若有自定义的词组或停顿词未被正常识别可添加自定义的拓展词典然后再ik插件目录的文件中进行配置。1、新增自定义词典my_ext.dic小米手机 鸿蒙系统 豆包大模型2、将文件放入到配置目录目录地址/usr/share/elasticsearch/config/analysis-ik3、配置文件中指定自定义的词典4、重启es验证同样的方法也可以配置指定义停顿词在停顿词文件中的词条分词时会被去掉。配置远程词库本地扩展词库每次修改需要重启es服务才能生效es支持配置远程词库通过接口请求的方式热更新扩展词库。核心IK 内置Monitor 定时线程每隔1 分钟向远程 URL 发起HEAD请求校验Last-Modified/ETag任意一个发生变化则GET拉取词库内存重载词典不需要重启 ES。可以通过搭建服务或使用nginx返回对应扩展文件。1、使用nginx返回词典数据nginx配置静态服务# 服务1IK远程词典8002端口 server{listen8002;# 指定静态资源目录 root/usr/share/nginx/html;# 本server下所有返回文本默认标记utf-8charset utf-8;# 关键让txt文件也带上charset默认charset只对html生效 charset_types text/plain;location/ikdict/{# 设置文件不缓存 add_headerCache-Controlno-cache;}}2、在资源目录下添加remote_dict.txt和remote_stop.txtremote_dict.txt 渣男 渣女remote_stop.txt 分割3、配置文件中配置远程地址保存后重启一次es后续只要远程文件有改动词库会自动更新。4、验证添加远程词库前词库生效前‘渣男’、‘渣女’被单独拆分‘分割’也被识别为了词条。当检测到远程文件变动时es会重新加载文件控制台有日志打印生效后