词干提取

词干提取支持

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

当前的分词支持基于Snowball词干提取库,该库支持大多数欧洲语言,以及阿拉伯语和其他语言。请参阅下面的“支持的语言”部分。我们希望很快能包含更多语言(如果您需要特定语言支持,请提出问题)。

更多详情请参见Snowball Stemmer网站

它是如何工作的?

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

为了定义在构建索引时Stemmer应该应用哪种语言,您需要为整个索引或特定字段指定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"

支持的语言

以下语言受支持,并且在使用小写进行索引或查询时可以传递给引擎:

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

中文支持

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

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

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

使用自定义词典

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

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

RATE THIS PAGE
Back to top ↑