elasticsearch实现基于拼音搜索
1、背景
一般情况下,有些搜索需求是需要根据 拼音 和中文 来搜索的,那么在elasticsearch 中是如何来实现基于拼音 来搜索的呢?可以通过elasticsearch-analysis-pinyin 分析器来实现。 2、安装拼音分词器# 进入 es 的插件目录 cd /usr/local/es/elasticsearch-8.4.3/plugins # 下载 wget https://github.com/medcl/elasticsearch-analysis-pinyin/releases/download/v8.4.3/elasticsearch-analysis-pinyin-8.4.3.zip # 新建目录 mkdir analysis-pinyin # 解压 mv elasticsearch-analysis-pinyin-8.4.3.zip analysis-pinyin && cd analysis-pinyin && unzip elasticsearch-analysis-pinyin-8.4.3.zip && rm -rvf elasticsearch-analysis-pinyin-8.4.3.zip cd ../ && chown -R es:es analysis-pinyin # 启动es /usr/local/es/elasticsearch-8.4.3/bin/elasticsearch -d3、拼音分词器提供的功能
拼音分词器提供如下功能
拼音分词器提供的功能
每个选项的含义 可以通过 文档中的例子来看懂。 4、简单测试一下拼音分词器4.1 dslGET _analyze { "text": ["我是中国人"], "analyzer": "pinyin" }
"analyzer": "pinyin" 此处的pinyin 是拼音分词器自带的。 4.2 运行结果
运行结果
从图片上,实现了拼音分词,但是这个不一定满足我们的需求,比如没有中文了,单个的拼音(比如:wo)是没有什么用的,需要对拼音分词器进行定制化。 5、es中分词器的组成
在 elasticsearch 中分词器analyzer 由如下三个部分组成: 1. character filters: 用于在tokenizer 之前对文本进行处理。比如: 删除字符,替换字符等。2. tokenizer: 将文本按照一定的规则分成独立的token。即实现分词功能。3. tokenizer filter: 将tokenizer 输出的词条做进一步的处理。比如: 同义词处理,大小写转换、移除停用词,拼音处理等。
处理流程
6、自定义一个分词器实现拼音和中文的搜索
需求: 自定义一个分词器,即可以实现拼音搜索,也可以实现中文搜索。 1、创建mappingPUT /test_pinyin { "settings": { // 分析阶段的设置 "analysis": { // 分析器设置 "analyzer": { // 自定义分析器,在tokenizer阶段使用ik_max_word,在filter上使用py "custom_analyzer": { "tokenizer": "ik_max_word", "filter": "custom_pinyin" } }, // 由于不满足pinyin分词器的默认设置,所以我们基于pinyin // 自定义了一个filter,叫py,其中修改了一些设置 // 这些设置可以在pinyin分词器官网找到 "filter": { "custom_pinyin": { "type": "pinyin", // 不会这样分:刘德华 > [liu, de, hua] "keep_full_pinyin": false, // 这样分:刘德华 > [liudehua] "keep_joined_full_pinyin": true, // 保留原始token(即中文) "keep_original": true, // 设置first_letter结果的最大长度,默认值:16 "limit_first_letter_length": 16, // 当启用此选项时,将删除重复项以保存索引,例如:de的> de,默认值:false,注意:位置相关查询可能受影响 "remove_duplicated_term": true, // 如果非汉语字母是拼音,则将其拆分为单独的拼音术语,默认值:true,如:liudehuaalibaba13zhuanghan- > liu,de,hua,a,li,ba,ba,13,zhuang,han,注意:keep_none_chinese和keep_none_chinese_together应首先启用 "none_chinese_pinyin_tokenize": false } } } }, // 定义mapping "mappings": { "properties": { "name": { "type": "text", // 创建倒排索引时使用的分词器 "analyzer": "custom_analyzer", // 搜索时使用的分词器,搜索时不使用custom_analyzer是为了防止 词语的拼音一样,但是中文含义不一样,导致搜索错误。 比如: 科技 和 客机,拼音一样,但是含义不一样 "search_analyzer": "ik_smart" } } } }
注意:
可以看到 我们的 name 字段 使用的分词器是 custom_analyzer ,这个是我们在上一步定义的。但是搜索的时候使用的是 ik_smart ,这个为甚么会这样呢?
假设我们存在如下2个文本 科技强国 和 这是一架客机 , 那么科技 和客机 的拼音是不是就是一样的。 这个时候如果搜索时使用的分词器也是custom_analyzer 那么,搜索科技 的时候客机 也会搜索出来,这样是不对的。因此在搜索的时候中文就以中文搜,拼音就以拼音搜。 { "name": { "type": "text", "analyzer": "custom_analyzer", "search_analyzer": "ik_smart" } }
当 analyzer 和search_analyzer 的值都是custom_analyzer ,搜索时也会通过拼音搜索,这样的结果可能就不是我们想要的。 2、插入数据PUT /test_pinyin/_bulk {"index":{"_id":1}} {"name": "科技强国"} {"index":{"_id":2}} {"name": "这是一架客机"} {"index":{"_id":3}}3、搜索数据
搜索数据 7、参考文档
1、https://github.com/medcl/elasticsearch-analysis-pinyin/tree/master
说百病喜怒无常是一病,忘义取利是一病好色坏德是一病,专心系爱是一病憎欲令死是一病,纵贪蔽过是一病毁人自誉是一病,善变自可是一病轻口喜言是一病,快意逐非是一病以智轻人是一病,乘权纵横是一病
初恋情怀初恋情怀自那一日,结你于哗哗的小河边,目见了柳儿拂水后,我的颤颤抖动的心呀,便随着隐隐闪闪的涟漪儿荡漾。说过的,谁先有了梦,便来这里相聚,悄悄的,说给柳听,说给水听,说给水中的鱼儿
江浙沪6个治愈系旅行地小众而不缺格调,累了就一个人出发头条创作挑战赛我见过你的秋色,淋过你的夏雨,下一次一定会乘着微风,赴一场日落的约会。10月是秋天的开始,十一假期还没有过,秋天的寒意就按捺不住脚步,提前到了人间。多想再来一次说走就
中外科学家借助大数据揭示地球大气氧化过程中新社武汉10月9日电(马芙蓉陈国雄)记者9日从中国地质大学(武汉)获悉,该校联合美国加州大学河滨分校加拿大地调局等机构科研人员,利用深时地学大数据和机器学习技术,重建了高精度的地
中国最美的4大佛光,令人大饱眼福,你见过吗?什么是佛光?人们常说佛光普照,这是一种信仰,一种美好的愿景,那么,现实中,有没有佛光呢?还真有,不过,是大自然的一种现象,通过光线衍射作用,产生的一种特殊的自然现象,一般都出现在高
中外科学家借助大数据揭示地球大气氧化过程中新社武汉10月9日电(马芙蓉陈国雄)记者9日从中国地质大学(武汉)获悉,该校联合美国加州大学河滨分校加拿大地调局等机构科研人员,利用深时地学大数据和机器学习技术,重建了高精度的地
公价7万以下哪款熊猫盘是你的最爱?腕表之家腕表推荐在计时码表的领域内,有一个非常经典的设计,表友们通常称之为熊猫盘。因其白色的表盘上配备了黑色小表盘(或者相反的配色)的样式酷似国宝大熊猫因此得名,通过这种强烈的视觉
玫琳凯美容顾问当一技之长可以不仅仅用来赚钱女性想要变美丽,许多人第一时间想到的就是玫琳凯美容顾问。相比于人们同样熟知的柜台销售员,玫琳凯美容顾问有着独特的分享美丽的方式美丽课。换季时节,各大商场的化妆品柜台开始上新,新品搭
凯特王妃又穿黄色靓衫出公务!升任王储妃后每回上班都笑脸灿烂最近凯特出席了她升任王储妃后的第二个单独公务。价值220英镑明黄色的KarenMillen裙子穿在身上,凯特笑得很灿烂。这是凯特第一次选择KarenMillen家的设计,不过细细一
南非国石价值多高南非国石价值多高。舒俱来在很多人眼中都很陌生,它是南非的国石。和翡翠在中国的地位一样高。高贵的紫色,呈现玻璃到蜡状的光泽。神秘又冷艳。那么舒俱来都有哪些种类呢?1樱花舒俱来,比紫色
新手也能get到的大唐流行妆本文所有人物故事均有史料支持,行文仅以喜闻乐见的形式讲述历史,不恶搞,非虚构各位唐朝观众朋友们大家好,我是你们练习时长两年半的美妆博主甲老师。最近听很多长安的粉丝反映说甲老师分享的