0
点赞
收藏
分享

微信扫一扫

ES最常用的中文、拼音分词器你还不会??

前言

分词是es进行搜索的一个核心内容,将输入内容分词之后,进行倒排索引的建立

那么有常见的有哪些呢?

  1. Standard Analyzer:默认分词器,适用于大多数语言,按空格和标点分词。
  2. IK Analyzer:适用于中文,提供轻量和智能两种模式,分词精度高。
  3. NGram Analyzer:通过生成字符 n-gram 来分词,适用于模糊匹配和拼音输入。
  4. Edge NGram Analyzer:生成字符前缀 n-gram,适用于自动补全和搜索提示。
  5. Whitespace Analyzer:只按空格分词,适用于简单的英文文本。
  6. Custom Analyzer:用户自定义分析器,灵活组合分词器和过滤器。
  7. Language-specific Analyzers:针对特定语言优化的分词器,如英文、法文等。
  8. Pattern Analyzer:使用正则表达式进行分词,适用于特定模式文本。
  9. Snowball Analyzer:支持多语言的词干提取,适合信息检索。
  10. Keyword Analyzer:不进行分词,适合精确匹配场景。
  11. Pinyin Analyzer:Elasticsearch 可以通过插件支持拼音分词器,常见的插件是<font style="color:rgb(36, 41, 47);background-color:rgb(244, 246, 248);">elasticsearch-analysis-pinyin</font>。该分词器会将中文汉字转换为拼音,并生成对应的拼音索引,以便进行拼音查询。

而在国内实际使用的业务的话,一般就是中文分词器IK Analyzer、拼音分词器Pinyin Analyzer、以及默认的标准分词器Standard Analyzer。

我们也以这其中的使用的比较多的中文分词器IK Analyzer、拼音分词器Pinyin Analyzer作为讲解

中文分词器IK Analyzer

默认的分词器是标准分词器,它会将文本分割为单词,并去除停用词(如“的”、“是”等),在生产实际使用过程中,是不符合国内的业务的

所以我们需要引入中文分词器 ik

  • IK Analyzer:一个流行的中文分词插件,支持细粒度和粗粒度两种分词模式,适合处理中文文本。

安装步骤

注意:安装的版本需要跟es的版本保持一致,我这里使用的7.3.2的

下载

  • 方式一:如果需要的ik是7.3.2 ,否则可以选择其他的方式
  • 公众号获取,回复ik<font style="color:rgb(26, 27, 28);">分词器</font>

ES最常用的中文、拼音分词器你还不会??_elasticsearch

  • 方式二:github下载

https://github.com/infinilabs/analysis-ik/tags

找到自己需要的版本

ES最常用的中文、拼音分词器你还不会??_分词器_02

例如我需要下载v7.3.2

ES最常用的中文、拼音分词器你还不会??_分词器_03

下载zip的方式

ES最常用的中文、拼音分词器你还不会??_分词器_04

上传,解压

# 切换到es下的plugins 这里根据自己es的安装目录
cd elasticsearch-7.3.2/plugins
# 上传
rz
# 解压
unzip elasticsearch-analysis-ik-7.3.2.zip -d ik
# 删除压缩包,否则启动会报错
rm -rf elasticsearch-analysis-ik-7.3.2.zip

重启es

  • <font style="color:rgb(36, 41, 47);background-color:rgb(244, 246, 248);">ps -ef|grep elasticsearch</font>查看es的pid

ES最常用的中文、拼音分词器你还不会??_分词器_05

  • 杀死程序 kill -9 pid
  • 进入es的bin目录,执行  <font style="color:rgb(36, 41, 47);background-color:rgb(244, 246, 248);">./elasticsearch -d</font>

分词测试

使用kibana进行查看

  • 标准分词器测试

POST /_analyze
{
  "tokenizer": "standard",  
  "text": "Elasticsearch分词器测试"
}

ES最常用的中文、拼音分词器你还不会??_github_06

  • ik分词器测试

POST /_analyze
{
  "tokenizer": "ik_max_word",
  "text": "Elasticsearch分词器测试"
}

ES最常用的中文、拼音分词器你还不会??_elasticsearch_07

可以看出二者的区别

拼音分词器Pinyin Analyzer

安装步骤

下载

方式一:

不过我的版本是7.3.2

关注I am Walker 回复pinyin即可获取

ES最常用的中文、拼音分词器你还不会??_分词器_08

方式二:

https://github.com/infinilabs/analysis-pinyin/tags

注意:需要注意,和自己es的版本需要一致,以我的版本为例 7.3.2

之后下载zip压缩包

ES最常用的中文、拼音分词器你还不会??_分词器_09

ES最常用的中文、拼音分词器你还不会??_分词器_10

上传插件

注意:先切换到es的启动用户,例如我的是esuser


su esuser

将zip压缩包上传es的plugins路径下

rz
# 解压 
unzip elasticsearch-analysis-pinyin-7.3.2.zip -d pinyin
# 删除压缩包
rm -rf elasticsearch-analysis-pinyin-7.3.2.zip

重启

进入es目录,执行bin/elasticsearch -d

验证

GET /_analyze
{
  "analyzer": "pinyin",
  "text": "大帅哥就是我"
}

可以看到执行结果:

ES最常用的中文、拼音分词器你还不会??_分词器_11

Springboot+EasyEs实现多分词器

针对详细的实现,具体可以参考

Easy-es 太绝了!

依赖

<dependency>
            <groupId>org.dromara.easy-es</groupId>
            <artifactId>easy-es-boot-starter</artifactId>
            <!--这里Latest Version是指最新版本的依赖,比如2.0.0,可以通过下面的图片获取-->
            <version>2.0.0</version>
        </dependency>

类的属性

@MultiIndexField(mainIndexField = @IndexField(fieldType = FieldType.KEYWORD),
            otherIndexFields = {@InnerIndexField(suffix = "zh", fieldType = FieldType.TEXT, analyzer = Analyzer.IK_SMART),
                    @InnerIndexField(suffix = "pinyin", fieldType = FieldType.TEXT, analyzer = Analyzer.PINYIN)})
    private String multiField;

搜索的时候

LambdaEsQueryWrapper<AlarmRecordEntity> wrapper = new LambdaEsQueryWrapper<>();

//        补充多分词查询
        if(StrUtil.isNotEmpty(form.getMultiField())){
            wrapper.like(AlarmRecordEntity::getMultiField,form.getMultiField())
                    .or()
                    .like("multiField.zh",form.getMultiField())
                    .or()
                    .like("multiField.pinyin",form.getMultiField());
        }

然后进行测试验证也是ok的

ES最常用的中文、拼音分词器你还不会??_分词器_12

参考文档

https://www.jianshu.com/p/653f7b33e63c


举报

相关推荐

0 条评论