您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# ElasticSearch怎么用ik进行中文分词
## 一、中文分词的核心挑战
### 1.1 中文语言特性分析
中文作为典型的孤立语,与英语等屈折语存在本质差异:
- 无显式词间分隔符(英文通过空格分隔)
- 词汇边界模糊("结婚的和尚未结婚的"存在多种切分方式)
- 复合词处理复杂("云计算"≠"云"+"计算")
- 词性变化灵活(同一词汇可作名词/动词/形容词)
### 1.2 机械分词法的局限性
传统最大匹配法(MM)面临三大困境:
1. 歧义消解困难:正向/逆向最大匹配结果不一致
2. 未登录词识别率低:人名、地名、新词等OOV问题
3. 语义理解缺失:"学生会"在不同语境下应区别切分
## 二、IK分词器技术架构
### 2.1 核心组件设计
```mermaid
graph TD
A[IK Analyzer] --> B[主分词器]
A --> C[子分词器]
B --> D[智能切分模式]
B --> E[细粒度模式]
C --> F[量词处理]
C --> G[中文数词]
main.dic
(核心词库约27万条)quantifier.dic
suffix.dic
stopword.dic
dynamic_dict.txt
采用改进的词典树结构: 1. 双数组Trie树实现快速检索 2. 基于统计的歧义消解(隐马尔可夫模型) 3. 后缀优先匹配策略
# 示例版本组合
ES_VERSION=8.5.1
IK_VERSION=8.5.0
# 安装步骤
bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v${IK_VERSION}/elasticsearch-analysis-ik-${IK_VERSION}.zip
PUT /news_articles
{
"settings": {
"analysis": {
"analyzer": {
"ik_smart_analyzer": {
"type": "custom",
"tokenizer": "ik_smart"
},
"ik_max_analyzer": {
"type": "custom",
"tokenizer": "ik_max_word",
"filter": ["lowercase"]
}
}
}
},
"mappings": {
"properties": {
"content": {
"type": "text",
"analyzer": "ik_max_analyzer",
"search_analyzer": "ik_smart_analyzer"
}
}
}
}
输入文本:”中国人民银行召开数字货币研讨会”
分词模式 | 输出结果 |
---|---|
ik_smart | [中国, 人民, 银行, 召开, 数字, 货币, 研讨会] |
ik_max_word | [中国, 国人, 人民, 人民银行, 银行, 召开, 数字, 货币, 研讨, 研讨会] |
<!-- IKAnalyzer.cfg.xml -->
<entry key="remote_ext_dict">http://cdn.yourdomain.com/dict/update.dic</entry>
import requests
last_modified = requests.head(dict_url).headers['Last-Modified']
PUT /_settings
{
"analysis": {
"filter": {
"tech_synonyms": {
"type": "synonym",
"synonyms": [
"5G, 第五代移动通信",
", 人工智能"
]
}
}
}
}
组合NLP模型与词典分词:
// 自定义分析器插件
public class HybridAnalyzerProvider extends AbstractIndexAnalyzerProvider<HybridAnalyzer> {
@Override
public HybridAnalyzer get() {
return new HybridAnalyzer(
new JiebaSegmenter(),
new IKTokenizer()
);
}
}
# Metrics示例
elasticsearch_analysis_ik_time{index="news", type="ik_smart"} 45ms
elasticsearch_analysis_ik_cache_hit_ratio 0.92
# elasticsearch.yml
index.store.type: mmapfs
edge_ngram
实现输入提示:{
"tokenizer": "ik_max_word",
"filter": [
{
"type": "edge_ngram",
"min_gram": 2,
"max_gram": 10
}
]
}
POST /_analyze
{
"analyzer": "ik_max_word",
"text": "违规内容需要识别"
}
# 日志字段处理
from elasticsearch import Elasticsearch
es = Elasticsearch()
body = {"query": {"match": {"message": {"query": "系统错误", "analyzer": "ik_smart"}}}}
res = es.search(index="applogs", body=body)
POST /my_index/_cache/clear
配置IKAnalyzer.cfg.xml
:
<entry key="keep_punctuations">false</entry>
版本匹配对照表:
ES版本 | IK版本分支 |
---|---|
7.x | 7.x |
8.x | 8.x |
OpenSearch | 需重新编译 |
{
"analyzer": {
"mixed_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"ik_smart",
"english_possessive"
]
}
}
}
附录:推荐配置参数
参数名 | 建议值 | 说明 |
---|---|---|
use_smart | true | 智能模式开关 |
enable_lowercase | true | 自动转小写 |
keep_original_word | false | 是否保留原词 |
max_token_length | 20 | 最大词元长度 |
参考文献 1. 《信息检索导论》Christopher D. Manning 2. Lucene官方文档(Apache 2.0) 3. IK分词器GitHub Wiki “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。