Elasticsearch 的中文分词机制是如何实现的?

Sherwin.Wei Lv8

Elasticsearch 的中文分词机制是如何实现的?

回答重点

Elasticsearch 的中文分词机制主要是通过插件来实现的,比较常用的是 IK 分词器。IK 分词器可以分为两种模式:一种是细粒度的分词模式,一种是智能分词模式。细粒度的模式会将文本尽可能多地细分成更多的词条,而智能分词模式则尝试生成更符合语言习惯的词条。

扩展知识

1)细粒度分词模式:

  • 特点: 细粒度分词模式将句子进行细分,以便于搜索时得到更多的匹配结果。例如,句子“我爱编程”会被细分为“我”,“爱”,“编程”。
  • 应用场景: 适用于需要高召回率的情境,例如电商搜索、全文检索等场景。

2)智能分词模式:

  • 特点: 智能分词模式会基于词典和人工智能分析来生成最符合语言习惯的词条。例如,句子“我爱编程”会被识别为“我爱”,“编程”。
  • 应用场景: 适用于需要高精度搜索的场景,例如问答系统、法律文档搜索等。

安装和使用 IK 分词器插件

1)安装:

  • 在 Elasticsearch 中安装 IK 分词器插件非常简单,可以通过以下命令安装:
    1
    ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/vx.x.x/elasticsearch-analysis-ik-x.x.x.zip
  • 安装完成后重启 Elasticsearch 服务。

2)使用:

  • 配置索引时指定分词器:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    PUT /my_index
    {
    "settings": {
    "analysis": {
    "analyzer": {
    "ik_smart": {
    "tokenizer": "ik_smart"
    },
    "ik_max_word": {
    "tokenizer": "ik_max_word"
    }
    }
    }
    }
    }

3)定义字段分词:

  • 在创建索引期间,可以指定字段使用何种分词器:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    PUT /my_index
    {
    "mappings": {
    "properties": {
    "text": {
    "type": "text",
    "analyzer": "ik_max_word",
    "search_analyzer": "ik_smart"
    }
    }
    }
    }

扩展知识点

1)自定义词典:

  • 中文分词过程中,有时需要识别一些特定的行业术语或新词汇,这时我们可以通过自定义词典来优化分词效果。IK 分词器支持加载用户自定义词典。

2)动态扩展词库:

  • 可以通过使用热更新词库的方式,在不重启 Elasticsearch 的情况下,动态添加新的词条到分词词典中,提升分词的灵活性。

3)与其它中文分词器比较:

  • 除了 IK 分词器,Elasticsearch 还支持其它一些中文分词器插件,比如 Jieba 分词器、HanLP 分词器等。每种分词器在具体功能和性能上都有自己的优势,可以根据具体需求选择合适的分词器。
Comments