# 词干提取

词干提取(Stemming)是一种在搜索时处理单词变体的技术。启用词干提取后,搜索某个单词的一种形式也会匹配该单词的其他语法形式。例如:

  • 搜索 "run" 会匹配 "running"、"runs"、"ran"
  • 搜索 "walk" 会匹配 "walking"、"walked"、"walks"
  • 搜索 "company" 会匹配 "companies"

Typesense 提供了两种处理单词变体的方法:

# 基础词干提取

基础词干提取使用 Snowball stemmer (opens new window) 算法自动检测和处理单词变体。由于基于规则,它适用于配置语言中的常见单词模式,但对于品牌名称、专有名词和地点可能会产生意外的副作用。由于这些规则主要针对普通名词设计,将它们应用于公司名称或地点等专业内容有时会降低搜索相关性。

要为字段启用基础词干提取,在集合模式中设置 "stem": true

词干提取使用的语言会根据字段的 locale 参数自动确定。例如,设置 "locale": "fr" 将使用法语特定的词干提取规则。

# 自定义词干提取词典

当您需要更精确地控制单词变体,或者处理算法词干提取无法很好处理的不规则形式时,可以使用词干提取词典。这些词典允许您定义单词与其词根形式之间的精确映射。

# 预置词典

Typesense 提供了一个预置的英文复数词典,用于处理常见的单复数形式变化。你可以从这里下载 (opens new window)

当您需要可靠地处理英文复数形式,同时避免算法词干提取可能带来的副作用时,这个词典特别有用。

# 创建词干提取词典

首先,创建一个包含单词映射关系的 JSONL 文件:

{"word": "people", "root": "person"}
{"word": "children", "root": "child"}
{"word": "geese", "root": "goose"}

然后使用词干提取词典 API 上传该文件:

# 示例响应

# 使用词干提取词典

要使用词干提取词典,可以在集合模式中使用 stem_dictionary 参数进行指定:

理解词干提取选项

在配置字段的词干提取时:

  1. 单独使用 "stem": true 会应用默认的 Porter 词干提取算法
  2. 使用 "stem_dictionary": "dictionary_name" 会自动启用词干提取功能(隐含了 "stem": true
  3. 当在同一字段上同时显式配置这两个选项时,词典词干提取优先

当你在配置中只指定 stem_dictionary 时,你会注意到 "stem": true 会自动出现在你的模式中,因为系统在配置词典词干提取时会默认启用基础词干提取功能。

# 管理词典

# 获取词典

# 列出所有词典

# 示例响应

# 最佳实践

  1. 从基础词干提取开始:对于大多数用例,设置适当的语言环境(locale)的基础词干提取就能很好地处理常见的单词变体。

  2. 对例外情况使用词典:在以下情况下添加词干提取词典:

    • 特定领域的单词变体
    • 基础词干提取无法获得理想结果的情况
  3. 特定语言注意事项:请注意基础词干提取行为会根据 locale 参数而变化。请根据内容语言正确设置此参数。