词干提取

词干提取支持

RediSearch 支持词干提取,即将单词的基本形式添加到索引中。例如,这允许查询“hiring”也能返回“hire”和“hired”的结果。

当前的词干提取支持基于 Snowball 词干提取库,该库支持大多数欧洲语言,以及阿拉伯语等。请参阅下方的“支持的语言”部分。我们希望尽快支持更多语言(如果您需要特定的语言支持,请提交 issue)。

更多详细信息请参阅 Snowball Stemmer 网站

工作原理?

词干提取将同一单词的不同形式映射到一个共同的词根 - “词干” - 例如,英语词干提取器将 studiedstudiesstudy 映射到 studi。因此搜索 studied 也会找到仅包含其他形式的文档。

为了定义在构建索引时应应用哪种语言的词干提取器,您需要为整个索引或特定字段指定 LANGUAGE 参数。更多详细信息请查看 FT.CREATE 语法。

创建包含语言定义的索引

为德语单词 "wort:" 创建一个索引,包含一个 TEXT 字段 "wort"

redis> FT.CREATE idx:german ON HASH PREFIX 1 "wort:" LANGUAGE GERMAN SCHEMA wort TEXT

添加单词

添加一些德语中具有相同词干的单词,单词 stück 的所有变体(英语中的 piece):stück stücke stuck stucke => stuck

redis> HSET wort:1 wort stück
(integer) 1
redis> HSET wort:2 wort stücke
(integer) 1
redis> HSET wort:3 wort stuck
(integer) 1
redis> HSET wort:4 wort stucke
(integer) 1

搜索共同词干

搜索“stuck”(德语中表示“piece”)。从 v2.10 开始,仅在创建用于搜索的索引时未指定 LANGUAGE 参数时,才需要指定它。注意,包含“ü”的单词的结果是 UTF-8 编码的。

redis> FT.SEARCH idx:german '@wort:(stuck)' German
1) (integer) 4
2) "wort:3"
3) 1) "wort"
   2) "stuck"
4) "wort:4"
5) 1) "wort"
   2) "stucke"
6) "wort:1"
7) 1) "wort"
   2) "st\xc3\xbcck"
8) "wort:2"
9) 1) "wort"
   2) "st\xc3\xbccke"

支持的语言

支持以下语言,在索引或查询时可以使用小写形式传递给引擎

  • 阿拉伯语
  • 亚美尼亚语
  • 丹麦语
  • 荷兰语
  • 英语
  • 芬兰语
  • 法语
  • 德语
  • 匈牙利语
  • 意大利语
  • 挪威语
  • 葡萄牙语
  • 罗马尼亚语
  • 俄语
  • 塞尔维亚语
  • 西班牙语
  • 瑞典语
  • 泰米尔语
  • 土耳其语
  • 意第绪语
  • 中文(见下文)

中文支持

索引中文文档与索引大多数其他语言的文档不同,因为分词(token 提取)的方式不同。大多数语言可以通过分隔符和空格来区分其 token,但这在中文中并不常见。

中文分词是通过扫描输入文本,并根据预定义的词汇字典检查每个字符或字符序列,然后根据周围的词汇和字符确定最可能的匹配来完成的。

Redis 开源版本为此目的使用了 Friso 中文分词库。这对用户基本是透明的,通常不需要额外的配置。

使用自定义词典

如果您希望使用自定义词典,可以在加载模块时在模块级别进行设置。FRISOINI 参数可以指向包含相关设置和词典文件路径的 friso.ini 文件位置。

请注意,没有默认的 friso.ini 文件位置。RedisSearch 带有自己的 friso.ini 和词典文件,这些文件在构建时已编译到模块二进制文件中。

评价本页
返回顶部 ↑