Seal^_^头像
Elasticsearch分词器深度实践:IK分词、自定义词典、同义词与拼音扩展封面图

Elasticsearch分词器深度实践:IK分词、自定义词典、同义词与拼音扩展

Elasticsearch分词器深度实践:IK分词、自定义词典、同义词与拼音扩展

分词是Elasticsearch文本检索的基础,良好的分词策略能显著提升搜索效果。本文将深入探讨IK分词器的使用方法,以及如何通过自定义词典、同义词和拼音扩展来优化中文分词效果,提升搜索的相关性和准确性。

1. IK分词器配置与使用

IK分词器是Elasticsearch中最常用的中文分词器之一,它支持两种分词模式:ik_smart(最粗粒度)和ik_max_word(最细粒度)。

配置IK分词器:

PUT /my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "ik_analyzer": {
          "type": "custom",
          "tokenizer": "ik_max_word"
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "content": {
        "type": "text",
        "analyzer": "ik_analyzer",
        "search_analyzer": "ik_analyzer"
      }
    }
  }
}

使用IK分词器:

POST /my_index/_analyze
{
  "analyzer": "ik_max_word",
  "text": "Elasticsearch是一个基于Lucene的搜索引擎"
}

2. 自定义词典实践

IK分词器允许我们添加自定义词典来优化特定词汇的分词效果。

创建自定义词典文件:

  1. 在Elasticsearch的config目录下创建ik目录
  2. 添加自定义词典文件custom.dic
  3. 在IKAnalyzer.cfg.xml中配置自定义词典路径

custom.dic内容示例:

搜索引擎 1000
大数据 1000
机器学习 1000

配置IKAnalyzer.cfg.xml:

<?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.dic;</entry>
    <!-- 用户可以在这里配置自己的扩展停止词字典 -->
    <entry key="ext_stopwords">stopword.dic;</entry>
</properties>

重启Elasticsearch后,自定义词典将生效。

3. 同义词扩展配置

同义词功能可以扩展搜索范围,提高查全率。

配置同义词词典:

  1. 创建同义词文件synonyms.txt
  2. 在索引设置中配置同义词分析器

synonyms.txt内容示例:

搜索引擎,搜索引擎技术,信息检索
大数据,海量数据,大规模数据
人工智能,智能计算,智能系统

配置同义词分析器:

PUT /my_index
{
  "settings": {
    "analysis": {
      "filter": {
        "my_synonym_filter": {
          "type": "synonym",
          "synonyms_path": "analysis/synonyms.txt"
        }
      },
      "analyzer": {
        "ik_synonym_analyzer": {
          "type": "custom",
          "tokenizer": "ik_max_word",
          "filter": ["my_synonym_filter"]
        }
      }
    }
  }
}

4. 拼音分词扩展

拼音分词可以支持拼音搜索,提升用户体验。

安装拼音分词插件:

./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-pinyin/releases/download/v7.10.2/elasticsearch-analysis-pinyin-7.10.2.zip

配置拼音分析器:

PUT /my_index
{
  "settings": {
    "analysis": {
      "filter": {
        "pinyin_filter": {
          "type": "pinyin",
          "keep_full_pinyin": true,
          "keep_joined_full_pinyin": true,
          "keep_separate_first_letter": false,
          "keep_none_chinese": true,
          "limit_first_letter_length": 16,
          "lowercase": true
        }
      },
      "analyzer": {
        "ik_pinyin_analyzer": {
          "type": "custom",
          "tokenizer": "ik_max_word",
          "filter": ["pinyin_filter"]
        }
      }
    }
  }
}

5. 实例演示与注意事项

下面是一个综合使用IK分词、自定义词典、同义词和拼音分词的完整示例:

PUT /search_demo
{
  "settings": {
    "analysis": {
      "filter": {
        "my_synonym_filter": {
          "type": "synonym",
          "synonyms_path": "analysis/synonyms.txt"
        },
        "pinyin_filter": {
          "type": "pinyin",
          "keep_full_pinyin": true,
          "keep_joined_full_pinyin": true,
          "keep_separate_first_letter": false,
          "keep_none_chinese": true,
          "limit_first_letter_length": 16,
          "lowercase": true
        }
      },
      "analyzer": {
        "ik_synonym_pinyin_analyzer": {
          "type": "custom",
          "tokenizer": "ik_max_word",
          "filter": ["my_synonym_filter", "pinyin_filter"]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "ik_synonym_pinyin_analyzer",
        "search_analyzer": "ik_synonym_pinyin_analyzer"
      },
      "content": {
        "type": "text",
        "analyzer": "ik_synonym_pinyin_analyzer",
        "search_analyzer": "ik_synonym_pinyin_analyzer"
      }
    }
  }
}

添加测试数据:

POST /search_demo/_bulk
{ "index": { "_id": "1" } }
{ "title": "Elasticsearch搜索引擎技术", "content": "Elasticsearch是一个基于Lucene的搜索引擎,提供了分布式多用户能力的全文搜索引擎" }
{ "index": { "_id": "2" } }
{ "title": "大数据分析应用", "content": "大数据技术正在改变企业的决策方式,帮助企业从海量数据中提取价值" }
{ "index": { "_id": "3" } }
{ "title": "人工智能与机器学习", "content": "人工智能和机器学习是当前技术领域的热点,正在各个行业得到广泛应用" }

查询测试:

GET /search_demo/_search
{
  "query": {
    "match": {
      "title": "搜索"
    }
  }
}

注意事项:

  1. 自定义词典和同义词词典需要重启Elasticsearch才能生效
  2. 拼音分词插件版本需要与Elasticsearch版本兼容
  3. 大型同义词词典可能会影响查询性能
  4. 在生产环境中使用拼音分词时,建议关闭首字母选项以减少索引大小
  5. 定期更新和维护自定义词典,确保词汇的时效性

Elasticsearch分词流程

原始文本

字符过滤

分词器处理

IK分词

同义词扩展

拼音扩展

小写转换

停用词过滤

输出词条

不同分词方式比较

分词方式优点缺点适用场景
ik_smart分词速度快,索引小分词粒度较粗,可能丢失细节对搜索精度要求不高的场景
ik_max_word分词粒度细,召回率高索引大,查询速度相对较慢对搜索精度要求高的场景
自定义词典可针对专业领域优化词汇需要手动维护词典专业领域应用,如医疗、法律等
同义词扩展提高查全率,扩展搜索范围可能引入噪声,增加索引大小同义词较多的场景,如产品搜索
拼音分词支持拼音搜索,提升用户体验增加索引大小,可能引入歧义中文用户为主,需要便捷输入的场景

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/qq_41840843/article/details/165128001

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--