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

349 阅读4分钟

前言

分词是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 可以通过插件支持拼音分词器,常见的插件是elasticsearch-analysis-pinyin。该分词器会将中文汉字转换为拼音,并生成对应的拼音索引,以便进行拼音查询。

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

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

中文分词器IK Analyzer

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

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

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

安装步骤

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

下载

  • 方式一:如果需要的ik是7.3.2 ,否则可以选择其他的方式

  • 公众号获取,回复ik分词器

图片

  • 方式二:github下载

github.com/infinilabs/…

找到自己需要的版本

图片

例如我需要下载v7.3.2

图片

下载zip的方式

图片

上传,解压

# 切换到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

  • ps -ef|grep elasticsearch查看es的pid

图片

  • 杀死程序 kill -9 pid

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

分词测试

使用kibana进行查看

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

图片

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

图片

可以看出二者的区别

拼音分词器Pinyin Analyzer

安装步骤

下载

方式一:

如果你觉得github下载比较慢的话,可以关注公众号获取

不过我的版本是7.3.2

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

图片

方式二:

github.com/infinilabs/…

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

之后下载zip压缩包

图片

图片

上传插件

注意:先切换到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": "大帅哥就是我"
}


可以看到执行结果:

图片

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的

如果需要源码,可以关注一下公众号,回复项目源码即可

图片

参考文档

www.jianshu.com/p/653f7b33e…

本文使用 文章同步助手 同步