词干提取
词干提取支持
RediSearch 支持词干提取 - 即将单词的基本形式添加到索引中。例如,这允许查询“hiring
”也能返回“hire
”和“hired
”的结果。
当前的分词支持基于Snowball词干提取库,该库支持大多数欧洲语言,以及阿拉伯语和其他语言。请参阅下面的“支持的语言”部分。我们希望很快能包含更多语言(如果您需要特定语言支持,请提出问题)。
更多详情请参见Snowball Stemmer网站。
它是如何工作的?
词干提取将同一单词的不同形式映射到一个共同的词根 - "词干" - 例如,英语词干提取器将studied、studies和study映射到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
和字典文件,这些文件在构建时被编译到模块二进制文件中。