栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

浅尝一下 ElasticSearch 的 Analyzer吧

浅尝一下 ElasticSearch 的 Analyzer吧

前言

我又出现了,这次不是更新 JVM 系列,毕竟要有时间嘛,所以我想在讲个其他系列的,正好最近了解了一下 ElasticSearch,刚好来分享一下。

我们都知道,ElasticSearch 有着非常优秀的检索文章的能力。并且我相信大多数人,都知道,这都是得益于它本身的倒排索引数据结构,大大提升了检索的性能。

但是呢,知道了这个数据结构,我们都表示明白了为什么那么快,但还是有点云里雾里。在倒排索引的内部组成有两部分重要组成,单词词典和倒排列表。

本篇的文章,就是带着大家了解,单词词典中的“单词”怎么来的!

Analysis 分词

首先解释一下,什么是 Analysis ? 可以把它理解为将文本转换成一系列单词(term/tokem)的过程(Analysis)。那么是怎么实现的?

在 ElasticSearch 中,Analysis 是通过 Analyzer 实现的。

那么又有问题了。

    它的组成是什么?Analyzer 中间做了什么?
Analyzer 分词器

首先,它的组成是是什么?

    Character Filters 。简单理解一下,就是针对原始文本处理,例如去除 Html,增删替换字符串,可以配置多个。Tokenizer。将原始文本按照规则分为单词)Token Filters。将切分后的单词进行加工,小写处理,删除停用词等等,可以配置多个。

还是有点迷,那么它中间做了什么呢?我们举个栗子,看下图

针对 

Mastering ElasticSearch & ElasticSearch in Action

。这句话,经过中间的 Analyzer。变成了 Master、Action、ElasticSearch、ElasticSearch 四个词。可能还是感知不强。我们实践一下(左边执行语句,右边结果)

第一步,感受一下什么 Character Filter,使用自带的 Character Filter 去除 Html

我们通过自带的 html_strip 去除了 p 标签。

第二步,非常关键,将句子拆分成一个个词

通过指定切词器为 standard ,把原先的一句话分开了。但是还是有点瑕疵。就是像 in 这种词高频出现的还在,已经现在词还有时态,像 Matering 、大小写等。

第三步,去除时态、stopword 词、全小写

以上出现每个部分的都是 ES 本身自带的。现在应该很清楚这三部分了吧。

结尾

ElasticSearch 的 Analyzer 是分为三部分的,其中我们的 char_filter 和 filter 是可以指定多个的(在指定的时候你发现它是个数组形式也可以猜出多个),并且也可以不指定。但是 tokenizer 是必需要有的。

这里简单了解了一下基本的部分,那么如何自定义呢?如何指定我们自定义的分词器了,我们下一篇揭晓,博主努力更新中。这里推荐张超大大写的《ElasticSearch 源码解析与优化实战》。

下期预告:双亲委派模型的应用或者是自定义分词器,也可能是其他,哈哈。

扩展 内置的几个 Analyizer

下面的 ELasticSearch 自带的

名称简介
Standard Analyzer默认分词器,按词切分,小写处理,并支持删除停止词
Simple Analyzer当遇到非字母的字符时切分。小写处理。
Whitespace Analyzer每当遇到任何空白字符时切分词。没有小写处理。
Stop Analyzersimple 增强,支持删除停止词。
Keyword Analyzer不切,原文直接输出
Pattern Analyzer使用正则表达式将文本分割,默认非字符分割(W+)。小写处理,删除停止字。
Language Analyzers这里不是指一个叫做 Language 分词器,这里表示的 Elasticsearch提供了许多语言特定的分词器,比如 english 或 french。
Fingerprint Analyzer这个比较特殊,官方是表示它可以生成用于重复检测的指纹,我还没碰到过
analyze api

相信上面也看到我一直使用这个 api,它特别好用。这是一个便于我们查询切词器结果的 api,可以帮我们快速排查问题,比如如果某些词搜不到,就可以通过这个 api 快速定位是不是切词产生的问题。

    直接指定分词器查看分词结果

    GET _analyze
    {
      "analyzer": "standard",
      "text": "

    Mastering ElasticSearch & ElasticSearch in Action

    " } 复制代码

    指定索引的字段查看该字段分词结果,可以用于得知咱们字段写入到单词词典中是那些词

    POST news/_analyze
    {
      "field": "title",
      "text": ["他说的确实在理"]
    }
    复制代码

    自定义分词器进行测试,查看结果。

    POST _analyze
    {
      "tokenizer": "keyword",
      "filter": ["lowercase"],
      "text": ["Mastering English"]
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/710246.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号