分词器
分词器接收一个字符流并将文本拆分为单独的词元。一个词元由一个术语(通常是一个单词)和关于该术语的元数据组成。例如,分词器可以根据空格拆分文本,因此文本 Actions speak louder than words. 变为 [Actions, speak, louder, than, words.]。
分词器的输出是词元流。分词器还维护以下有关词元的元数据
- 每个词元的顺序或位置:此信息用于单词和短语的邻近查询。
- 词元在文本中的起始和结束位置(偏移量):此信息用于突出显示搜索词条。
- 词元类型:某些分词器(例如,
standard)按类型对词元进行分类,例如<ALPHANUM>或<NUM>。更简单的分词器(例如,letter)仅将词元分类为word类型。
您可以使用分词器定义自定义分析器。
内置分词器
下表列出了 OpenSearch 提供的内置分词器。
单词分词器
单词分词器将全文解析为单词。
| 分词器 | 描述 | 示例 |
|---|---|---|
standard | - 在单词边界处将字符串解析为词元 - 移除大部分标点符号 | 为 OpenSearch 贡献一个全新的 PR 或两个 PR 很有趣! 变为 [ It’s, fun, to, contribute, a,brand, new, PR, or, 2, to, OpenSearch] |
letter | - 在任何非字母字符处将字符串解析为词元 - 移除非字母字符 | 为 OpenSearch 贡献一个全新的 PR 或两个 PR 很有趣! 变为 [ It, s, fun, to, contribute, a,brand, new, PR, or, to, OpenSearch] |
lowercase | - 在任何非字母字符处将字符串解析为词元 - 移除非字母字符 - 将词条转换为小写 | 为 OpenSearch 贡献一个全新的 PR 或两个 PR 很有趣! 变为 [ it, s, fun, to, contribute, a,brand, new, pr, or, to, opensearch] |
whitespace | - 在空格字符处将字符串解析为词元 | 为 OpenSearch 贡献一个全新的 PR 或两个 PR 很有趣! 变为 [ It’s, fun, to, contribute, a,brand-new, PR, or, 2, to, OpenSearch!] |
uax_url_email | - 类似于 standard 分词器 - 与 standard 分词器不同,会将 URL 和电子邮件地址保留为单个词条 | 为 OpenSearch opensearch-project@github.com 贡献一个全新的 PR 或两个 PR 很有趣! 变为 [ It’s, fun, to, contribute, a,brand, new, PR, or, 2, to, OpenSearch, opensearch-project@github.com] |
classic | - 将字符串解析为词元: - 后面跟着空格字符的标点符号 - 如果词条不包含数字,则按连字符拆分 - 移除标点符号 - 将 URL 和电子邮件地址保留为单个词条 | 零件号 PA-35234,一次性产品 (128.32) 变为 [ Part, number, PA-35234, single, use, product, 128.32] |
thai | - 将泰语文本解析为词条 | สวัสดีและยินดีต 变为 [ สวัสด, และ, ยินดี, ต] |
部分单词分词器
部分单词分词器将文本解析为单词,并生成这些单词的片段以进行部分单词匹配。
| 分词器 | 描述 | 示例 |
|---|---|---|
ngram | - 在指定字符(例如,标点符号或空格字符)处将字符串解析为单词,并生成每个单词的 n-gram | 我的仓库 变为 [ M, My, y, y , , r, r, re, e, ep, p, po, o]因为默认的 n-gram 长度是 1–2 个字符 |
edge_ngram | - 在指定字符(例如,标点符号或空格字符)处将字符串解析为单词,并生成每个单词的边缘 n-gram(从单词开头开始的 n-gram) | 我的仓库 变为 [ M, My]因为默认的 n-gram 长度是 1–2 个字符 |
结构化文本分词器
结构化文本分词器解析结构化文本,例如标识符、电子邮件地址、路径或邮政编码。
| 分词器 | 描述 | 示例 |
|---|---|---|
keyword | - 无操作分词器 - 输出整个字符串不变 - 可以与 token 过滤器(例如 lowercase)结合使用来规范化词条 | 我的仓库 变为 我的仓库 |
模式 | - 使用正则表达式模式在单词分隔符处解析文本为词条,或捕获匹配的文本作为词条 - 使用 Java 正则表达式 | https://opensearch.org.cn/forum 变为 [ https, opensearch, org, forum],因为默认情况下分词器在单词边界 (\W+) 处拆分词条可以使用正则表达式模式进行配置 |
simple_pattern | - 使用正则表达式模式返回匹配的文本作为词条 - 使用 Lucene 正则表达式 - 比 pattern 分词器更快,因为它使用了 pattern 分词器正则表达式的一个子集 | 默认返回一个空数组 必须配置模式,因为模式默认为空字符串 |
simple_pattern_split | - 使用正则表达式模式在匹配处拆分文本,而不是返回匹配项作为词条 - 使用 Lucene 正则表达式 - 比 pattern 分词器更快,因为它使用了 pattern 分词器正则表达式的一个子集 | 默认无操作 必须配置模式 |
char_group | - 根据一组可配置字符进行解析 - 比运行正则表达式的分词器更快 | 默认无操作 必须配置字符列表 |
path_hierarchy | - 根据路径分隔符(默认为 /)解析文本,并返回树层次结构中每个组件的完整路径 | one/two/three 变为 [ one, one/two, one/two/three] |