博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ES自定义Analyzer扩展IK分词
阅读量:4129 次
发布时间:2019-05-25

本文共 1161 字,大约阅读时间需要 3 分钟。

IPS产品关键词搜索需求要对英文标题、品牌(英文)、规格属性(英文)、产品型号、描述属性、商品特征、关键搜索词等字段进行模糊匹配搜索

前期由于拿不到数据也不清楚具体数据是什么样的,并且线上集群也没有安装IK分词器,于是做了两套方案一是直接使用模糊查询,二是使用分词查询
后面因为开发进度问题,也一直拿不到正式数据,暂时使用第一套方案,若出现性能问题再做优化
由于线上ES没有安装IK分词器,也不确定数据中会不会有中英文混合的数据,所以先自己用虚拟机搭了集群做实验,方便后期优化:
因为仅使用英文分词器,或中文分词器,对这种中英文混合的数据都不是很友好,只用中文分词器对英文单词不会进行词干提取,会降低命中率,而用英文分词则会把一句中文仅仅分成一个一个字
所以要进行自定义分词

ElasticSearch的分析器实际上是将三个功能封装在一起,这三个功能按照顺序执行,而这三个功能都是能自定义的

①字符过滤器 (char_filter)
首先,字符串按顺序通过每个字符过滤器,他们的任务是在分词前整理字符串
②分词器 (tokenizer)
其次,字符串被分词器分爲单个的词条,一个简单的分词器遇到空格和标点的时候,可能会将文本拆分成词条
Hello, how are you?会被ES预设的分词器standard分成hello、how、are、you
③Token 过滤器 (filter)
最后,词条按顺序通过每个 token 过滤器,这个过程可能会改变词条(Quick -> quick)、删除词条(a、an、and、the…)、增加词条(jump和leap这种同义词)
在这里插入图片描述
这里我们在创建索引的时候要setting自定义分词器,这里自定义名字起为"optimizeIK",
由于观察到测试数据中会有带有HTML 标签的一些数据 所以增加了过滤这部分数据的char_filter : html_strip
并使用IK分词 tokenizer : ik_max_word
设置filter为 stemmer,这样就会对分出来的英文单词进行词干提取

在这里插入图片描述

设置完自定义Analyzer后 对字段进行mapping,需要使用到的这个分词器的字段 mapping上 analyzer : optimizeIK , 比如这里是对"father_type"下的"analysis_field"字段设定mapping
这样这个字段在写入时就会按照我们预设的自定义分词进行分词

在这里插入图片描述

需要注意的是如果还有父子mapping的话需要先对先对子type进行mapping 否则会报父type已存在的异常

使用默认分词器

在这里插入图片描述
使用自定义分词
在这里插入图片描述

只需要在对需要自定义分词的字段进行查询时指定相应的Analyzer,在搜索时就会用相同的分词方式对搜索关键词进行拆分检索

转载地址:http://qjzvi.baihongyu.com/

你可能感兴趣的文章
Linux分区方案
查看>>
如何使用 systemd 中的定时器
查看>>
git命令速查表
查看>>
linux进程监控和自动重启的简单实现
查看>>
OpenFeign学习(三):OpenFeign配置生成代理对象
查看>>
OpenFeign学习(四):OpenFeign的方法同步请求执行
查看>>
OpenFeign学习(五):OpenFeign请求结果处理及重试控制
查看>>
OpenFeign学习(六):OpenFign进行表单提交参数或传输文件
查看>>
Ribbon 学习(二):Spring Cloud Ribbon 加载配置原理
查看>>
Ribbon 学习(三):RestTemplate 请求负载流程解析
查看>>
深入理解HashMap
查看>>
XML生成(一):DOM生成XML
查看>>
XML生成(三):JDOM生成
查看>>
Ubuntu Could not open lock file /var/lib/dpkg/lock - open (13:Permission denied)
查看>>
collect2: ld returned 1 exit status
查看>>
C#入门
查看>>
C#中ColorDialog需点两次确定才会退出的问题
查看>>
数据库
查看>>
nginx反代 499 502 bad gateway 和timeout
查看>>
linux虚拟机安装tar.gz版jdk步骤详解
查看>>