【ES】--Elasticsearch的分词器深度研究

一、问题描述及分析

面对现实很多复杂情况,默认的ES搜索引擎方式已经不能支持。下面将针对常见的问题进行分析,如何使用ES的分词器达到预定效果。
常见有ik、pinyin、tsconvert三种分词器,
elasticsearch-analysis-ik
elasticsearch-analysis-pinyin
elasticsearch-analysis-stconvert

现有问题场景要求
(1)、对检索结果,要能简繁搜索、特殊符号过滤搜索、中文搜索、英文搜索、中英混搜、中文+全拼、中文+首字母混搜等
(2)、搜索的结果不要太零散(不要把关键词分成一个一个的字)
(3)、不希望搜索的关键词匹配到语气助词
(4)、一些特定的词语(如’中国的炎黄子孙’)不希望被分词,要能够整体匹配
面对上面等问题,分析如下:
(1)、对检索结果,要能同时搜索到简繁体、能搜索到拼音等
—对要搜索的字段进行multi-fields属性设置,使该字段能满足多场景的搜索
(2)、搜索的结果不要太零散(不要把关键词分成一个一个的字)
—ES默认的standard分词器会把汉字分为一个个汉字。ik分词器主要有ik_smart【最少切分,最粗精度】、ik_max_word【最多切分,最细精度】两种模式。
(3)、不希望搜索的关键词匹配到语气助词
—使用“停用词”来过滤掉语气助词。排除停用词可以加快建立索引的速度,减小索引库文件的大小,并且还可以提高查询的准确度。【参考https://blog.csdn.net/qq_29864051/article/details/124831207】
(4)、一些特定的词语(如’中国的炎黄子孙’)不希望被分词,要能够整体匹配
—可以通过对ik分词器添加自定义词典。另外,为了切换实际场景,可以采用“热更新自定义词典”方案。

二、analyze分析器原理

在这里插入图片描述
一个analyzer即分析器包含character filters(字符过滤器)、 tokenizers(分词器)、token filters(令牌过滤器)三个细分模块的包。
character filters(字符过滤器):用于接收原始文本字符的流,并且可以通过添加,移除,或改变字符来转变原始字符流。可以拥有0个或者多个,按照顺序生效。
tokenizers(分词器):接收字符流将其分解为单独的 tokens(即单个单词),并输出tokens流。还负责记录每个term的顺序或位置以及该term所代表的原始单词的开始和结束字符偏移量。必须有且只有一个分词器。
token filters(令牌过滤器):接收令牌流,并且可以添加,删除或改变token。可以有0个或多个,按顺序应用生效。

三、 multi-fields字段支持多场景搜索

从Elasticsearch 5.x开始,multi_fields多字段特性已经被移除。对于Elasticsearch 5.x或更高版本,需要使用不同的方法来定义复合字段,例如使用fields属性直接在普通字段上定义多个字段类型。

3.1、 创建索引,并设置multi-fields

创建一个索引
PUT /wwy_test_new_1
创建文档
POST /wwy_test_new_1/_doc/{序号}
在这里插入图片描述
查看分词器如何分词
POST /wwy_test_new_1/_analyze
{
“field”:“words_one.ikIndexAnalyzer”,
“text”:“家书”
}
查询结果
POST /wwy_test_new_1/_doc/_search
在这里插入图片描述
给某个字段设置多个属性的fields。如下所示

 "words_one": {
   
          "type": "text",
          "fields": {
   
            "ikIndex": {
   
              "type": "text",
              "analyzer": "ikIndexAnalyzer"
            },
            "ikSearch": {
   
              "type": "text",
              "analyzer": "ikSearchAnalyzer"
            },
            "keyword": {
   
              "type": "keyword",
              "ignore_above": 256,
              "normalizer": "lowercase_normalizer"
            },
            "ngramIndex": {
   
              "type": "text",
              "analyzer": 
  • 12
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DreamBoy_W.W.Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值