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

简介: 知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。知识分享系列目前包含Java、Golang、Linux、Docker等等。

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

背景

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

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

开发环境

内容

本节我们进行了解一下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 异常分词器,它允许我们定义异常。异常是正则表达式分词器的输入流处理的一部分。这些部分作为单一令牌分词器保持不变。任何与这些正则表达式不匹配的输入都会传递给子分词器。

本文声明:

5330898-d1c72b6c90e378f3.png
知识共享许可协议
本作品由 [cn華少]采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。

目录
相关文章
|
8月前
|
JSON API Go
Golang工程组件:自定义HTTP规则的grpc-gateway选项
总的来说,grpc-gateway提供了一种简单有效的方式来为你的gRPC服务提供RESTful风格的API。通过自定义HTTP规则,你可以灵活地定义你的API的行为,以满足你的应用的需求。
210 27
|
中间件 Go 数据处理
应用golang的管道-过滤器架构风格
【10月更文挑战第1天】本文介绍了一种面向数据流的软件架构设计模式——管道-过滤器(Pipe and Filter),并通过Go语言的Gin框架实现了一个Web应用示例。该模式通过将数据处理流程分解为一系列独立的组件(过滤器),并利用管道连接这些组件,实现了模块化、可扩展性和高效的分布式处理。文中详细讲解了Gin框架的基本使用、中间件的应用以及性能优化方法,展示了如何构建高性能的Web服务。
336 1
|
Go
golang力扣leetcode 3.无重复字符的最长子串
golang力扣leetcode 3.无重复字符的最长子串
125 0
|
Go
Golang语言基础数据类型之字符类型
这篇文章介绍了Go语言中的字符类型,包括字符概述、byte和rune类型的定义、转义字符的使用以及如何遍历字符串获取字符的示例。
162 0
|
Go
【golang】Go 判断字符串是否包含指定字符
【golang】Go 判断字符串是否包含指定字符
342 1
|
Go 缓存 存储
Golang每日一练(leetDay0054) 用 Read4 读取 N 个字符 1\2
Golang每日一练(leetDay0054) 用 Read4 读取 N 个字符 1\2
181 0
Golang每日一练(leetDay0054) 用 Read4 读取 N 个字符 1\2
golang踩坑 2.goroutine闭包和遍历字符串字符
golang踩坑 2.goroutine闭包和遍历字符串字符
|
自然语言处理 Java Linux
知识分享之Golang——Bleve中的Token filters各种标记过滤器
知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。 知识分享系列目前包含Java、Golang、Linux、Docker等等。
213 0
知识分享之Golang——Bleve中的Token filters各种标记过滤器
|
Java Linux Go
知识分享之Golang——Bleve中提供的各类搜索方法(一)
知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。 知识分享系列目前包含Java、Golang、Linux、Docker等等。
421 0
知识分享之Golang——Bleve中提供的各类搜索方法(一)
|
2月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
206 1

推荐镜像

更多