知识分享之Golang——Bleve中的字符过滤器和分词规则

背景

知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。

知识分享系列目前包含Java、Golang、Linux、Docker等等。

开发环境

  • 系统:windows10
  • 语言:Golang
  • 组件库:Bleve
  • golang版本:1.17

内容

本节我们进行了解一下Bleve中的Text Analysis中各项组件到底是做什么用的。

1、字符过滤器(Character Filters)

根据官方文档描述,字符过滤器使用了一个正则表达式和一个字节替换数组来进行过滤。当与正则表达式记性匹配时所有符合的字符序列都被替换为替换字节。通常,在整个字符流中不希望被索引到的字符都会被替换为空格。这允许原始输入中的原始字节偏移量不受影响。

另外其中还有HTML字符过滤器,这个是字符过滤器的一个实例,我们可以根据自己的需要进行制作私有的正则表达式字符过滤器。
其次还有一个零宽度非连接过滤器(Zero-width Non-Joiner)我理解为不可见字符过滤器,这个过滤器可以将零宽度非连接字符替换为空格。

2、分词器、分词规则(Tokenizers)

Single Token Tokenizers,单一令牌分词器,这个分词器会将整个输入字节作为单个令牌返回,我理解的是输入这段字节作为一个索引词。具体后续我们进行翻看源码并制作demo进行测试。

Letter Tokenizers,字母分词器,它简单的将标记识别为属于字母类别的Unicode符文序列。

Regular Expression Tokenizers,正则表达式分词器,这将使用我们配置的正则表达式进行标记输入,正则表达式需要匹配当前标记文本。这个本质上就是我们定义一个正则表达式,输入字符符合于该正则表达式,并且我们将输入字符指向到该分词器,就可以完成分词。

Whitespace Tokenizers 空白分词器,它简单的将标记识别为不属于Space类别的Unicode符文序列。我理解为就是零宽度非连接字符分词器。待后续深入研究。

Unicode Tokenizers 统一码分词器,使用统一的段库在单词边界上执行Unicode文本分割。
对于所有不需要ICU支持的且基于字典的表计划的语言,官方建议使用ICU分词器。

ICU Tokenizers 该分词器使用ICU库在单词边界上使用Unicode文本分割对输入进行分词。
注意:此分词器需要使用可选的ICU包构建bleve。

Exception Tokenizers 异常分词器,它允许我们定义异常。异常是正则表达式分词器的输入流处理的一部分。这些部分作为单一令牌分词器保持不变。任何与这些正则表达式不匹配的输入都会传递给子分词器。

本文声明:
知识共享许可协议
本作品由 cn華少 采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。