Elasticsearch:简体繁体转换分词器 - STConvert analysis
我的前同事 Medcl 大神,在 github 上也创建了一个转换简体及繁体的分词器。这个在我们的很多的实际应用中也是非常有用的,比如当我的文档是繁体的,但是我们想用中文对它进行搜索。
安装
我们可以按照如下的方法来对这个分词器进行安装:
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-stconvert/releases/download/v8.2.3/elasticsearch-analysis-stconvert-8.2.3.zip
你可以根据发行的版本及自己的 Elasticsearch 版本来选择合适的版本来安装。
安装完这个插件后,我们必须注意的是:重新启动 Elasticsearch 集群。我们可以使用如下的命令来进行查看:
./bin/elasticsearch-plugin list
$ ./bin/elasticsearch-plugin list
analysis-stconvert
该插件包括如下的部分:
- analyzer:stconvert
- tokenizer: stconvert
- token-filter:stconvert
- char-filter: stconvert
它还支持如下的配置:
- convert_type:默认值为 s2t,其它的选项为:
- s2t:从简体中文转换为繁体中文
- t2s:从繁体中文转换为简体中文
- keep_both:默认为 false
- delimiter:默认是以 , 为分隔符
例子
我们使用如下的例子来进行展示:
PUT /stconvert/
{"settings": {"analysis": {"analyzer": {"tsconvert": {"tokenizer": "tsconvert"}},"tokenizer": {"tsconvert": {"type": "stconvert","delimiter": "#","keep_both": false,"convert_type": "t2s"}},"filter": {"tsconvert": {"type": "stconvert","delimiter": "#","keep_both": false,"convert_type": "t2s"}},"char_filter": {"tsconvert": {"type": "stconvert","convert_type": "t2s"}}}}
}
在上面,我们创建一个叫做 stconvert 的索引。它定义了一个叫做 tscovert 的 analyzer。如果你想了解更多关于如何定制 analyzer,请阅读我之前的文章 “Elasticsearch: analyzer”。
我们做如下的分词测试:
GET stconvert/_analyze
{"tokenizer" : "keyword","filter" : ["lowercase"],"char_filter" : ["tsconvert"],"text" : "国际國際"
}
上面的命令显示:
{"tokens" : [{"token" : "国际国际","start_offset" : 0,"end_offset" : 4,"type" : "word","position" : 0}]
}
我们可以使用如下的一个定制 analyzer 来对繁体字来进行分词:
PUT index
{"settings": {"analysis": {"char_filter": {"tsconvert": {"type": "stconvert","convert_type": "t2s"}},"normalizer": {"my_normalizer": {"type": "custom","char_filter": ["tsconvert"],"filter": ["lowercase"]}}}},"mappings": {"properties": {"foo": {"type": "keyword","normalizer": "my_normalizer"}}}
}
我们使用如下的命令来写入一些文档:
PUT index/_doc/1
{"foo": "國際"
}PUT index/_doc/2
{"foo": "国际"
}
在上面,我们定义了 foo 字段的分词器为 my_normalizer,那么上面的繁体字 “國際” 将被 char_filter 转换为 “国际”。我们使用如下的命令来进行搜索时:
GET index/_search
{"query": {"term": {"foo": "国际"}}
}
它返回的结果为:
{"took" : 1,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 2,"relation" : "eq"},"max_score" : 0.18232156,"hits" : [{"_index" : "index","_id" : "1","_score" : 0.18232156,"_source" : {"foo" : "國際"}},{"_index" : "index","_id" : "2","_score" : 0.18232156,"_source" : {"foo" : "国际"}}]}
}
如果我们对它进行 term 搜索:
GET index/_search
{"query": {"term": {"foo": "國際"}}
}
它返回的结果为:
{"took" : 0,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 2,"relation" : "eq"},"max_score" : 0.18232156,"hits" : [{"_index" : "index","_id" : "1","_score" : 0.18232156,"_source" : {"foo" : "國際"}},{"_index" : "index","_id" : "2","_score" : 0.18232156,"_source" : {"foo" : "国际"}}]}
}
我们甚至可以结合之前我介绍的 IK 分词器来对繁体字进行分词:
PUT index
{"settings": {"analysis": {"char_filter": {"tsconvert": {"type": "stconvert","convert_type": "t2s"}},"analyzer": {"my_analyzer": {"type": "custom","char_filter": ["tsconvert"],"tokenizer": "ik_smart","filter": ["lowercase"]}}}},"mappings": {"properties": {"foo": {"type": "text","analyzer": "my_analyzer"}}}
}
在上面,我们先对繁体字进行繁体到简体的转换,然后使用 ik 分词器对它进行分词,之后在进行小写。我们使用如下的命令来进行测试:
GET index/_analyze
{"analyzer": "my_analyzer", "text": "我愛北京天安門"
}
上面命令的返回结果是:
{"tokens" : [{"token" : "我","start_offset" : 0,"end_offset" : 1,"type" : "CN_CHAR","position" : 0},{"token" : "爱","start_offset" : 1,"end_offset" : 2,"type" : "CN_CHAR","position" : 1},{"token" : "北京","start_offset" : 2,"end_offset" : 4,"type" : "CN_WORD","position" : 2},{"token" : "天安门","start_offset" : 4,"end_offset" : 7,"type" : "CN_WORD","position" : 3}]
}
我们还可以做另外一个测试:
GET index/_analyze
{"analyzer": "my_analyzer", "text": "請輸入要轉換簡繁體的中文漢字"
}
结果是:
{"tokens" : [{"token" : "请","start_offset" : 0,"end_offset" : 1,"type" : "CN_CHAR","position" : 0},{"token" : "输入","start_offset" : 1,"end_offset" : 3,"type" : "CN_WORD","position" : 1},{"token" : "要","start_offset" : 3,"end_offset" : 4,"type" : "CN_CHAR","position" : 2},{"token" : "转换","start_offset" : 4,"end_offset" : 6,"type" : "CN_WORD","position" : 3},{"token" : "简繁体","start_offset" : 6,"end_offset" : 9,"type" : "CN_WORD","position" : 4},{"token" : "的","start_offset" : 9,"end_offset" : 10,"type" : "CN_CHAR","position" : 5},{"token" : "中文","start_offset" : 10,"end_offset" : 12,"type" : "CN_WORD","position" : 6},{"token" : "汉字","start_offset" : 12,"end_offset" : 14,"type" : "CN_WORD","position" : 7}]
}
Elasticsearch:简体繁体转换分词器 - STConvert analysis相关推荐
- JavaScript看图器 汉字简体繁体转换 中国日历类 自动更换桌面墙纸
抢24的扑克游戏 自动更换桌面墙纸 中国日历类 汉字简体繁体转换 JavaScript看图器 无缝MARQUEE 包含图片的option下拉菜单 微软JS脚本的加密与解 ...
- 如何在Elasticsearch中安装中文分词器(IK+pinyin)
如何在Elasticsearch中安装中文分词器(IK+pinyin) 如果直接使用Elasticsearch的朋友在处理中文内容的搜索时,肯定会遇到很尴尬的问题--中文词语被分成了一个一个的汉字,当 ...
- 汉字简体繁体转换----Javascript
最近看到有个简体--繁体字互相转换的程序,是用JS实现的,感觉很好玩,所以拿来研究研究.先看看界面如下: 汉字简体繁体转换 上面的所有代码如下: <script> function cop ...
- Elasticsearch Analyzer 内置分词器
Elasticsearch Analyzer 内置分词器 篇主要介绍一下 Elasticsearch中 Analyzer 分词器的构成 和一些Es中内置的分词器 以及如何使用它们 前置知识 es 提供 ...
- [JS脚本][实用小软件]一个简单的汉字简体繁体转换工具源代码
演示请到: 汉字简体繁体转换工具 ------------------------------------------ 代码如下: -------------------------- 汉字简体繁体转 ...
- 利用客户端js实现汉字简体繁体转换
<HEAD> <TITLE> New Document </TITLE> </HEAD> <BODY> <html> <h ...
- Elasticsearch 定义多个分词器模板
Elasticsearch 定义多个分词器模板 版本:Elasticsearch 7.2.0 1.定义索引时,使用多个分词器 2.在模板中定义中使用多个分词器 3.ik+pinyin 对人工智能感 ...
- 免费在线汉字简体繁体转换工具
简体字和繁体字相互转换,很实用的! 进入这里一键转换:简体繁体转换
- Elasticsearch中安装IK分词器
Elasticsearch中默认的分词器对中文的支持不好,会分隔成一个一个的汉字.而IK分词器对中文的支持比较好一些,主要有两种模式"ik_smart"和"ik_max_ ...
最新文章
- Android 哥哥福利
- 单独的plsql链接数据库
- 力扣——按递增顺序显示卡牌
- 修正memcache.php中的错误示例
- ubuntu下安装openfetion
- 光端机使用与日常保养
- 新唐M0 KEIL环境搭建,找不到device不识别,关键:Nu-Link_Keil_Driver
- 【ARM-Linux开发】U-Boot启动过程--详细版的完全分析
- 计算机网络—子网掩码的划分
- Python numpy学习笔记(一)
- master节点重置后添加node报错_企业实战(23)基于Docker平台的Jenkins添加node节点与报错详解(2)...
- 主机电子游戏攻略资源分享
- 记录从网页下载ppt的过程。
- 阿里研发三面,面试官一套组合拳让我当场懵逼
- android shape大小,Android中shape属性详解
- 通俗易懂spring之singleton和prototype
- android 高性能框架,高性能架构
- iOS苹果内购详细步骤
- 排污口漂浮物监测系统 yolov5
- IDEA设置自定义主题背景
热门文章
- 【微信小程序】腾讯位置服务地图选点 服务示例
- matlab某数组中产生不重复随机数,数组的随机排序,randperm函数numel,X=X(A)函数
- 扭曲丛林服务器未响应,LOL扭曲丛林正式被删,云顶之弈成为永久模式,无限火力将回归...
- mysql: Data truncated for column ‘id‘ at row 1
- Android与EPS8266模块通信(一)编写Android客户端
- Pycharm从一个断点运行到下一个断点
- 属性动画+购物车+全选反选+选中计算价格+单个删除
- python 批量读取电脑文件夹内视频,获取视频分辨率,过滤删除分辨率较小的文件
- 第14步:自定义CSS和主题颜色
- Python第二章相关知识补充