阅读 82

elasticsearch之文本分析

概述

在es中,可以对text字段进行分析,那么文本分析是什么意思?本文主要对该阶段的工作过程进行描述。

简单而言,文本分析发生在2个阶段:

  • 建立索引

  • 搜索阶段

建立索引时,分析的结果存到倒排索引中,其实这就是文档存在索引中的内容,便于后续的检索,搜索阶段和建立索引阶段分析过程是一样的。在搜索时候,本质上是对建立的倒排索引进行查询,而非文本本身。

分析器

一个分析器主要由3个部分构成:0个或多个字符过滤器、1个分词器、0个或多个分词过滤器。es已经提供一些官方的分析器,每个分析器包含对应的字符过滤器、分词器以及分词过滤器。另外,用户还可以根据自身需要定制化自己的分析器,这对搜索质量的提高极为重要。

  • 字符过滤阶段

在该阶段可以对输入的字符流进行增删改操作,比如过滤些敏感词或者html的标签等字符。
例如

"<head>Hello, 深圳<head>" -> [Hello深圳]

常用的字符过滤器有:

类别作用
HTML Strip Character Filter去除html的标记,如head
Mapping Character Filter将匹配到的字符串映射为指定的字符串
Pattern Replace Character Filter将正则匹配到的内容替换为指定字符串
  • 分词阶段

一般而言,一个分析器中仅有一个分词器,该分词器会将字符串切分成多个分词(token),并记录分词的起始位置,方便后续的,高亮和模糊搜索操作。

_analyze{
    "tokenizer" : "standard"
    "text" : "Hello深圳"       }

返回的结果如下:

{
   "tokens" : [
      {
          "token" : "hello",
          "start_offset" : 0,
          "end_offset" : 5,
          "type" : <ALPHANUM>,
          "position": 0
      }
      ...
   ]
    }

常见的分词器有:

类别作用
Standard Tokenizer去除些表点符号,适用于大部分语言
Lowercase Tokenizer非字母时分割文本
...
  • 分词过滤

该阶段和字符过滤类似,只是该阶段的输入是分词输入流进行转换操作(增删改),而非字符输入流。常见的有去掉停用词、增加同义词等。

_analyze{
    "tokenizer" : "standard"
    "text" : "Hello深圳"       }

常见的分词过滤器有:

类别作用
Length Token Filter过滤太长或太短的分词
Standard Tokenizer不做处理,占坑的
...

总结

在调试搜索问题时(如搜索不到文档),经常需要根据分析器的工作原理进行定位,如根据_analyze接口,配备对应的参数来逐步锁定问题。

2人点赞

日记本



作者:猩球驿站
链接:https://www.jianshu.com/p/7442b28f5357


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐