词干提取
词干提取支持
RediSearch 支持词干提取 - 即向索引添加单词的词干形式。例如,这允许查询“hiring
”也返回“hire
”和“hired
”的结果。
当前的词干提取支持基于 Snowball 词干提取器库,该库支持大多数欧洲语言,以及阿拉伯语和其他语言。请参阅下面的“支持的语言”部分。我们希望很快包含更多语言(如果您需要特定语言支持,请提交问题)。
有关更多详细信息,请参阅 Snowball 词干提取器网站。
它是如何工作的?
词干提取将同一个词的不同形式映射到一个共同的词根 -“词干” - 例如,英语词干提取器将 studied、studies 和 study 映射到 studi。因此,搜索 studied 也会找到仅包含其他形式的文档。
为了定义词干提取器在构建索引时应应用哪种语言,您需要为整个索引或特定字段指定 LANGUAGE
参数。有关更多详细信息,请检查 FT.CREATE 语法。
创建带有语言定义的索引
为德语单词“wort:
”创建索引,其中包含一个名为“wort
”的 TEXT
字段
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”)。只有在创建用于搜索的索引时未指定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
和字典文件,这些文件在构建时被编译到模块二进制文件中。