3打造企业级搜索词库管理体系

学习目标

  • 构建词库的方法
  • 掌握Elastic Stack的词库集成机制和功能

词库的完备性影响搜索结果,影响用户体验

目录

  • 词库构建策略
  • 词库热更新机制

如何评估构建的搜索系统的能力?

词库构建策略

  • IK Analyzer
    提供ik_max_word和ik smart两种分词策略
  • HanLP Analyzer
    属于HanLP工具包,支持多种分词算法

IK Analyzer

ik_max_word:切分粒度细
ik smart:切分粒度粗

elastic search版本与analysis-ik版本需一致

初始化IK

https://github.com/infinilabs/analysis-ik/releases/tag/v7.9.3
把IK Analyzer文件拷贝到elastic search/plugins/ik文件夹

config文件夹:词库,IKAnalyzer.cfg配置词库
elasticsearch head ,es服务器管理可视化工具
kibana Kibana 可视化工具 可搜索和查看存储在 Elasticsearch索引中的数据并与之交互
开发过程中验证分词效果

自定义词库

  1. config文件夹新建词库文件 *.dic,写入关键词
  2. 添加配置
  3. 重启服务

词库热更新机制

动态数据变更场景都需要考虑热更新能力
实时更新分析器和索引

  • 只新增
    如敏感词
  • 增删改
    如专业词

只新增

方案:远程扩展词库接口实现方案

  1. 运营后台修改词库
  2. IK分词器定时合并主词库

远程扩展词库接口

  1. 开发查询接口
    查询数据库中是否有新词
  2. 配置远程接口

数据库同步

使用云es服务不可修改es源码,此方案不可用

思路:修改IK源码,Dictionary加载时启动线程定时获取数据库新增字典,并更新到词库(调用Dictionary的addWords方法添加)

增删改

新增 IK的Dictionary.addWords方法
删除 IK的Dictionary.disableWords方法
更新 删除+更新

注:需添加数据库配置文件jdbc.properties,数据库驱动包mysql-connector-java.jar

思考题

基于IK分词器,如果向实现词库热更新有哪几种实现方式?