elasticsearch之文本分析

2020-10-15  本文已影响0人  猩球驿站

概述

在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接口,配备对应的参数来逐步锁定问题。

上一篇 下一篇

猜你喜欢

热点阅读