当前位置: 首页 > news >正文

魔方网站导航设计付费推广网站

魔方网站导航设计,付费推广网站,asp网站源代码下载,手机app开发Elasticsearch IK 中文分词器详解与实战 1. 什么是分词器 (Analyzer)? 分词器是 Elasticsearch 中用于处理文本数据的核心组件。它的作用是将用户输入的原始文本(如一句话、一段描述)分解成一个个独立的、有意义的“词”或“词条” (Term)。…

Elasticsearch IK 中文分词器详解与实战

1. 什么是分词器 (Analyzer)?

分词器是 Elasticsearch 中用于处理文本数据的核心组件。它的作用是将用户输入的原始文本(如一句话、一段描述)分解成一个个独立的、有意义的“词”或“词条” (Term)。这些词条是后续建立倒排索引和进行搜索匹配的基础。

  • 英文分词:通常以空格、标点符号为界进行切割(如 “Hello World” -> [“Hello”, “World”])。

  • 中文分词:挑战在于没有天然的分隔符。需要依赖词典和算法来识别词语边界(如 “发展智慧城市与数字经济” -> [“发展”, “智慧”, “城市”, “智慧城”, “市”, “与”, “数字”, “经济”, “数”, “字”, “经”, “济”] 或 [“发展”, “智慧城市”, “与”, “数字经济”])。

使用合适的分词器对中文搜索的准确性和召回率至关重要。


2. 内置标准分词器 (Standard Analyzer) 的局限性

Elasticsearch 自带 standard 分词器,适用于大多数语言,但在处理中文时效果不佳。

(1) 分析英文 (效果良好)

GET http://192.168.130.61:9200/_analyze
{"analyzer": "standard","text": "The quick brown fox jumps over the lazy dog near the riverbank."
}

结果

{"tokens": [{"token": "the", ...},{"token": "quick", ...},{"token": "brown", ...},{"token": "fox", ...},{"token": "jumps", ...},{"token": "over", ...},{"token": "the", ...},{"token": "lazy", ...},{"token": "dog", ...},{"token": "near", ...},{"token": "the", ...},{"token": "riverbank", ...}]
}
  • 说明:成功按空格和标点分割,并转为小写。

(2) 分析中文 (效果差,不适用)

GET http://192.168.130.61:9200/_analyze
{"analyzer": "standard","text": "人工智能改变未来生活"
}

结果

{"tokens": [{"token": "人", ...},{"token": "工", ...},{"token": "智", ...},{"token": "能", ...},{"token": "改", ...},{"token": "变", ...},{"token": "未", ...},{"token": "来", ...},{"token": "生", ...},{"token": "活", ...}]
}
  • 说明standard 分词器将每个汉字都视为一个独立的词。这显然不符合中文语言习惯,会导致搜索时无法匹配到“人工智能”、“未来生活”这样的完整词语,严重影响搜索效果。

3. 安装 IK 分词器 (Elasticsearch 8.2)

IK 分词器是 Elasticsearch 最流行的中文分词插件,由 Medcl 开发,支持热更新词典。

(1) 下载插件

前往 GitHub 发布页,下载与您的 Elasticsearch 8.2 版本完全匹配的 IK 插件。

  • GitHub 地址:https://github.com/medcl/elasticsearch-analysis-ik

  • 直接下载 (示例)

    # 请根据实际发布的 8.2.x 版本号替换 v8.2.x
    wget https://release.infinilabs.com/analysis-ik/stable/elasticsearch-analysis-ik-8.2.2.zip
    

(2) 安装插件

注意:以下路径 /data/elasticsearch/softwares/elasticsearch-8.2.2/ 是示例,请替换为您实际的 Elasticsearch 安装路径。

# 1. 创建插件目录 (如果不存在)
sudo mkdir -p /data/elasticsearch/softwares/elasticsearch-8.2.2/plugins/ik# 2. 解压插件到指定目录
sudo unzip elasticsearch-analysis-ik-8.2.2.zip -d /data/elasticsearch/softwares/elasticsearch-8.2.2/plugins/ik# 3. 确保目录权限正确 (es 用户和组)
#    假设 Elasticsearch 以用户 'elasticsearch' 运行
sudo chown -R elasticsearch:elasticsearch /data/elasticsearch/softwares/elasticsearch-8.2.2/plugins/ik# 4. (可选) 验证安装
#    可以查看解压后的文件,特别是 config 目录下的配置文件和词典
ls /data/elasticsearch/softwares/elasticsearch-8.2.2/plugins/ik/config/#或者
cd /data/elasticsearch/softwares/elasticsearch-8.2.2/
bin/elasticsearch-plugin  install https://get.infini.cloud/elasticsearch/analysis-ik/8.2.2
chown -R elasticsearch:elasticsearch plugins/

(3) 重启 Elasticsearch 集群

安装插件后必须重启 Elasticsearch 节点才能生效。请依次重启集群中的每个节点

# 示例 (根据您的实际服务名调整)
sudo systemctl restart es
# 或
sudo /data/elasticsearch/softwares/elasticsearch-8.2.2/bin/elasticsearch -d

(4) 验证 IK 插件安装成功

重启后,检查 IK 分词器是否可用:

GET http://192.168.130.61:9200/_analyze
{"analyzer": "ik_smart","text": "发展智慧城市与数字经济"
}curl -X GET "http://192.168.130.61:9200/_analyze" -H "Content-Type: application/json" -d'
{"analyzer": "ik_smart","text": "发展智慧城市与数字经济"
}' 2>/dev/null | jq{"tokens": [{"token": "发展","start_offset": 0,"end_offset": 2,"type": "CN_WORD","position": 0},{"token": "智慧","start_offset": 2,"end_offset": 4,"type": "CN_WORD","position": 1},{"token": "城市","start_offset": 4,"end_offset": 6,"type": "CN_WORD","position": 2},{"token": "与","start_offset": 6,"end_offset": 7,"type": "CN_CHAR","position": 3},{"token": "数字","start_offset": 7,"end_offset": 9,"type": "CN_WORD","position": 4},{"token": "经济","start_offset": 9,"end_offset": 11,"type": "CN_WORD","position": 5}]
}

如果返回分词结果而非错误,说明安装成功。


4. 使用 IK 分词器

IK 提供了两种主要的分词模式:

(1) ik_max_word (细粒度分词)

尽可能地将文本进行最细粒度的拆分,会穷尽各种可能的组合。

GET http://192.168.130.61:9200/_analyze
{"analyzer": "ik_max_word","text": "人工智能改变未来生活"
}

预期结果

{"tokens": [{"token": "人工", ...},{"token": "人工智能", ...},     // 识别出"人工智能"{"token": "智能", ...},{"token": "改变", ...},{"token": "未来", ...},{"token": "未来生活", ...},   // 识别出"未来生活"{"token": "生活", ...}]
}
  • 用途:追求最高的召回率,确保不遗漏任何可能的匹配项。适用于搜索场景,但索引会更大。

(2) ik_smart (智能/粗粒度分词)

进行最智能、最少的切分,只输出最少的词单元。

GET http://192.168.130.61:9200/_analyze
{"analyzer": "ik_smart","text": "人工智能改变未来生活"
}

预期结果

{"tokens": [{"token": "人工智能", ...},{"token": "改变", ...},{"token": "未来", ...},{"token": "生活", ...}]
}
  • 用途:追求更高的准确率,减少索引膨胀。适用于索引文档或对性能要求较高的场景。

5. 自定义 IK 分词器词典

IK 的强大之处在于支持自定义词典,可以添加专业术语、新词、网络用语等。

(1) 创建自定义词典目录和文件

进入 IK 插件的 config 目录。

cd /data/elasticsearch/softwares/elasticsearch-8.2.2/plugins/ik/config/# 创建自定义词典目录
sudo mkdir custom-dict# 创建自定义词典文件 (以 .dic 为后缀)
sudo vim custom-dict/my-words.dic

my-words.dic 文件中,每行写一个词条:

量子计算
区块链技术
元宇宙
新能源汽车
碳中和
智能制造
5G网络
物联网

(2) 配置 IK 加载自定义词典

编辑 IK 的主配置文件 IKAnalyzer.cfg.xml

sudo vim IKAnalyzer.cfg.xml

<properties>...</properties> 标签内,找到 <entry key="ext_dict"> 行,将其修改为指向您创建的词典文件。路径是相对于 config 目录的

<?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-dict/my-words.dic</entry> <!-- 添加这一行或修改现有行 --><!-- 用户可以在这里配置自己的扩展停止词字典--><!-- <entry key="ext_stopwords">custom-dict/ext_stopword.dic</entry> --><!-- 用户可以在这里配置远程扩展字典 --><!-- <entry key="remote_ext_dict">http://xxx.com/xxx.dic</entry> --><!-- 用户可以在这里配置远程停止词字典--><!-- <entry key="remote_ext_stopwords">http://xxx.com/xxx.dic</entry> -->
</properties>

(3) 重启 Elasticsearch

修改配置文件后,必须重启 Elasticsearch 集群才能使新词典生效

sudo systemctl restart es

(4) 测试自定义词典效果

GET http://192.168.130.61:9200/_analyze 
{"analyzer": "ik_smart","text": "随着量子计算和区块链技术的发展,元宇宙概念兴起。新能源汽车与智能制造成为碳中和目标下的重要产业,5G网络和物联网技术广泛应用。"
}curl -X GET "http://192.168.130.62:9200/_analyze" -H "Content-Type: application/json" -d'
{"analyzer": "ik_smart","text": "随着量子计算和区块链技术的发展,元宇宙概念兴起。新能源汽车与智能制造成为碳中和目标下的重要产业,5G网络和物联网技术广泛应用。"
}' 2>/dev/null | jq

预期结果

{"tokens": [{"token": "随着", ...},{"token": "量子计算", ...},       // ✅ 自定义词{"token": "和", ...},{"token": "区块链技术", ...},     // ✅ 自定义词{"token": "的", ...},{"token": "发展", ...},{"token": "元宇宙", ...},         // ✅ 自定义词{"token": "概念", ...},{"token": "兴起", ...},{"token": "新能源汽车", ...},     // ✅ 自定义词{"token": "与", ...},{"token": "智能制造", ...},       // ✅ 自定义词{"token": "成为", ...},{"token": "碳中和", ...},         // ✅ 自定义词{"token": "目标", ...},{"token": "下", ...},{"token": "的", ...},{"token": "重要", ...},{"token": "产业", ...},{"token": "5G网络", ...},         // ✅ 自定义词{"token": "和", ...},{"token": "物联网", ...},         // ✅ 自定义词{"token": "技术", ...},{"token": "广泛", ...},{"token": "应用", ...}]
}

可以看到,量子计算区块链技术元宇宙新能源汽车智能制造碳中和5G网络物联网 这些自定义的专业术语都被成功识别为一个完整的词条,显著提升了分词的准确性。


总结

  • standard 分词器不适用于中文
  • IK 分词器是处理中文分词的首选插件,提供 ik_max_word (细) 和 ik_smart (粗) 两种模式。
  • 必须安装与 ES 版本严格匹配的 IK 插件,并重启 ES。
  • 通过自定义词典 (ext_dict) 可以极大地提升分词的准确性和业务相关性,这是 IK 的核心优势。
  • 修改词典或配置后务必重启 ES
http://www.dtcms.com/a/531295.html

相关文章:

  • 摄影网站建设需求分析百度免费云服务器
  • 微信公众号怎么做网站的编写软件的步骤
  • 视频嵌入网站ps高手教学网站
  • 输入网站域名宁波教育学会网站建设
  • 温州企业网站开发wordpress 社区 插件
  • 网站建设成都市网站开发入门习题
  • 与建设通相关的网站百度推广官网
  • 如何做cpa单页网站赣州新闻综合频道回放
  • wordpress门户站新媒体营销
  • 大连企业建站系统模板wp网站打开太慢怎么做优化
  • 网站报价凯里有哪些网站开发公司
  • 网站建设朋友圈怎么写wordpress前台资料
  • 兰州商城网站建城市生活网官方网站app
  • 兖州网站建设手机网站打开微信支付功能
  • 9个广州seo推广神技河南seo公司
  • 企业建设网站需注意哪些事项网站开发工程师职责
  • 网站引流怎么做的免费制作网站平台
  • 长沙网站建设方案广州公司注册核名
  • 西部数据网站助手俄罗斯军事基地
  • 哪个网站专题做的好桦南县建设局网站
  • pc网站建设怎么样做网站需要多钱
  • 企业网站策划书制作西宁高端企业网站建设
  • 湖北网站建设哪家有网站建设经费申请
  • 网站产品页如何做优化网站建设欧美
  • 情侣建站的wordpress主题网站图片不是本站的对seo有什么不好
  • 除尘环保设备网站模板吉林华商建设集团网站
  • 网站开发教程公司上海网站外包
  • 代做ppt的网站wordpress 安装权限
  • 网站顶部轮播怎么做国贸网站建设
  • 新网站建设怎么样个人网站怎么写