我的前同事 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相关推荐

  1. JavaScript看图器 汉字简体繁体转换 中国日历类 自动更换桌面墙纸

      抢24的扑克游戏   自动更换桌面墙纸   中国日历类   汉字简体繁体转换   JavaScript看图器   无缝MARQUEE   包含图片的option下拉菜单   微软JS脚本的加密与解 ...

  2. 如何在Elasticsearch中安装中文分词器(IK+pinyin)

    如何在Elasticsearch中安装中文分词器(IK+pinyin) 如果直接使用Elasticsearch的朋友在处理中文内容的搜索时,肯定会遇到很尴尬的问题--中文词语被分成了一个一个的汉字,当 ...

  3. 汉字简体繁体转换----Javascript

    最近看到有个简体--繁体字互相转换的程序,是用JS实现的,感觉很好玩,所以拿来研究研究.先看看界面如下: 汉字简体繁体转换 上面的所有代码如下: <script> function cop ...

  4. Elasticsearch Analyzer 内置分词器

    Elasticsearch Analyzer 内置分词器 篇主要介绍一下 Elasticsearch中 Analyzer 分词器的构成 和一些Es中内置的分词器 以及如何使用它们 前置知识 es 提供 ...

  5. [JS脚本][实用小软件]一个简单的汉字简体繁体转换工具源代码

    演示请到: 汉字简体繁体转换工具 ------------------------------------------ 代码如下: -------------------------- 汉字简体繁体转 ...

  6. 利用客户端js实现汉字简体繁体转换

    <HEAD> <TITLE> New Document </TITLE> </HEAD> <BODY> <html> <h ...

  7. Elasticsearch 定义多个分词器模板

    Elasticsearch  定义多个分词器模板 版本:Elasticsearch  7.2.0 1.定义索引时,使用多个分词器 2.在模板中定义中使用多个分词器 3.ik+pinyin 对人工智能感 ...

  8. 免费在线汉字简体繁体转换工具

    简体字和繁体字相互转换,很实用的! 进入这里一键转换:简体繁体转换

  9. Elasticsearch中安装IK分词器

    Elasticsearch中默认的分词器对中文的支持不好,会分隔成一个一个的汉字.而IK分词器对中文的支持比较好一些,主要有两种模式"ik_smart"和"ik_max_ ...

最新文章

  1. Android 哥哥福利
  2. 单独的plsql链接数据库
  3. 力扣——按递增顺序显示卡牌
  4. 修正memcache.php中的错误示例
  5. ubuntu下安装openfetion
  6. 光端机使用与日常保养
  7. 新唐M0 KEIL环境搭建,找不到device不识别,关键:Nu-Link_Keil_Driver
  8. 【ARM-Linux开发】U-Boot启动过程--详细版的完全分析
  9. 计算机网络—子网掩码的划分
  10. Python numpy学习笔记(一)
  11. master节点重置后添加node报错_企业实战(23)基于Docker平台的Jenkins添加node节点与报错详解(2)...
  12. 主机电子游戏攻略资源分享
  13. 记录从网页下载ppt的过程。
  14. 阿里研发三面,面试官一套组合拳让我当场懵逼
  15. android shape大小,Android中shape属性详解
  16. 通俗易懂spring之singleton和prototype
  17. android 高性能框架,高性能架构
  18. iOS苹果内购详细步骤
  19. 排污口漂浮物监测系统 yolov5
  20. IDEA设置自定义主题背景

热门文章

  1. 【微信小程序】腾讯位置服务地图选点 服务示例
  2. matlab某数组中产生不重复随机数,数组的随机排序,randperm函数numel,X=X(A)函数
  3. 扭曲丛林服务器未响应,LOL扭曲丛林正式被删,云顶之弈成为永久模式,无限火力将回归...
  4. mysql: Data truncated for column ‘id‘ at row 1
  5. Android与EPS8266模块通信(一)编写Android客户端
  6. Pycharm从一个断点运行到下一个断点
  7. 属性动画+购物车+全选反选+选中计算价格+单个删除
  8. python 批量读取电脑文件夹内视频,获取视频分辨率,过滤删除分辨率较小的文件
  9. 第14步:自定义CSS和主题颜色
  10. Python第二章相关知识补充