在Elasticsearch中安装中文分词插件是实现中文文本高效检索的关键步骤。最常用且成熟的方案是IK分词器,它支持细粒度分词、自定义词典、停用词过滤等核心功能,并能很好地适配Elasticsearch各主流版本。
安装中文分词插件
安装前准备
- 版本匹配:确保IK插件版本与Elasticsearch版本完全一致,否则会导致服务启动失败。本文示例环境为Elasticsearch 8.17.0。
- 权限检查:确保对Elasticsearch安装目录有写入权限。
- 集群部署:如果在集群环境中,需要在所有节点上安装该插件。
在线安装
- 进入Elasticsearch的安装目录。
- 执行以下命令进行安装:
./bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/8.17.0
安装过程中会提示确认,输入 y 继续即可。
验证安装
- 插件安装完成后,需要重启Elasticsearch服务。
- 查看已安装的插件列表,以确认安装成功:
curl "https://localhost:9200/_cat/plugins?v" -u elastic:654321 -k
- 测试分词效果,验证插件是否正常工作:
curl -X POST "https://127.0.0.1:9200/_analyze" -H 'Content-Type:application/json' -d '{"analyzer":"ik_max_word","text":"中国清洁发电重要突破填补全球空白"}' -u elastic:654321 -k
分词器:ik_max_word 与 ik_smart 的区别
IK插件提供了两种分析器,适用于不同的场景。
-
ik_max_word:最细粒度拆分(索引阶段推荐)
- 策略:进行最细粒度的切分,穷尽所有可能的词语组合。
- 特点:将文本拆分成所有可能的词,力求不遗漏任何组合。类似于为图书馆的书籍建立索引时,将书名、目录、内容中的每个关键词和字都单独记录。
- 命令示例:
curl -X POST "https://127.0.0.1:9200/_analyze" -H 'Content-Type:application/json' -d '{"analyzer":"ik_max_word","text":"中华人民共和国国歌"}' -u elastic:654321 -k
分词结果:中华人民共和国、中华人民、中华、华人、人民共和国、人民、共和国、共和、国、国歌
-
ik_smart:最粗粒度拆分(搜索阶段推荐)
对比可见:ik_max_word 会将文本拆分为非常细致的多种组合,甚至到单字级别;而 ik_smart 则只保留最完整、最合理的词语。
为什么需要两种模式?
- 索引阶段:使用
ik_max_word 尽可能多地建立倒排索引词条,确保各种可能的查询词都能被命中,提高查全率。
- 查询阶段:使用
ik_smart 避免将用户输入的查询词过度切分,使查询意图更明确,从而提升结果的相关性(查准率)。
最佳实践
官方推荐的标准配置是:索引时使用细粒度的 ik_max_word,搜索时使用粗粒度的 ik_smart。
在Spring Boot项目中集成 Elasticsearch时,可以在实体类的字段上通过注解进行配置。例如,修改Product实体的name和description属性:
@Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart") // 文本类型,索引用ik_max_word,搜索用ik_smart
private String name;
@Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
private String description;
通过这样的配置,系统在存储数据时会建立丰富的索引,而在响应用户搜索时又能精准理解查询意图,从而在数据库与中间件层面实现高效、准确的中文全文检索。
|