elasticsearch之文本分析
在es中,可以对text字段进行分析,那么文本分析是什么意思?本文主要对该阶段的工作过程进行描述。 简单而言,文本分析发生在2个阶段: 建立索引 搜索阶段 建立索引时,分析的结果存到倒排索引中,其实这就是文档存在索引中的内容,便于后续的检索,搜索阶段和建立索引阶段分析过程是一样的。在搜索时候,本质上是对建立的倒排索引进行查询,而非文本本身。 一个分析器主要由3个部分构成:0个或多个字符过滤器、1个分词器、0个或多个分词过滤器。es已经提供一些官方的分析器,每个分析器包含对应的字符过滤器、分词器以及分词过滤器。另外,用户还可以根据自身需要定制化自己的分析器,这对搜索质量的提高极为重要。 字符过滤阶段 在该阶段可以对输入的字符流进行增删改操作,比如过滤些敏感词或者html的标签等字符。 常用的字符过滤器有: 分词阶段 一般而言,一个分析器中仅有一个分词器,该分词器会将字符串切分成多个分词(token),并记录分词的起始位置,方便后续的,高亮和模糊搜索操作。 返回的结果如下: 常见的分词器有: 分词过滤 该阶段和字符过滤类似,只是该阶段的输入是分词输入流进行转换操作(增删改),而非字符输入流。常见的有去掉停用词、增加同义词等。 常见的分词过滤器有: 在调试搜索问题时(如搜索不到文档),经常需要根据分析器的工作原理进行定位,如根据_analyze接口,配备对应的参数来逐步锁定问题。概述
分析器
例如"<head>Hello, 深圳<head>" -> [Hello深圳]
类别 作用 HTML Strip Character Filter 去除html的标记,如head Mapping Character Filter 将匹配到的字符串映射为指定的字符串 Pattern Replace Character Filter 将正则匹配到的内容替换为指定字符串 _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 不做处理,占坑的 ... … 总结
2人点赞
日记本
作者:猩球驿站
链接:https://www.jianshu.com/p/7442b28f5357