分词器
分词器接收一个字符流并将文本拆分为单独的词元。一个词元由一个术语(通常是一个单词)和关于该术语的元数据组成。例如,分词器可以根据空格拆分文本,因此文本 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 ] |