中文支持
在 Redis Stack 中搜索和查询的中文支持
从 0.99.0 版本开始,支持添加中文文档。
中文支持允许使用分词而不是使用空格和/或标点符号进行简单分词来添加和分词中文文档。
由于提取标记的方式不同,索引中文文档与索引大多数其他语言的文档不同。大多数语言可以通过分隔符和空格来区分其标记,但在中文中并不常见。
中文分词通过扫描输入文本并将每个字符或字符序列与预定义术语词典进行比较来完成,并根据周围的术语和字符确定最有可能的匹配。
Redis Stack 为此目的使用了 Friso 中文分词库。这对于用户来说基本上是透明的,通常不需要额外的配置。
示例:在查询中使用中文
在伪代码中
FT.CREATE idx ON HASH SCHEMA txt TEXT
HSET docCn txt "Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。从盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。[8]"
FT.SEARCH idx "数据" LANGUAGE chinese HIGHLIGHT SUMMARIZE
# Outputs:
# <b>数据</b>?... <b>数据</b>进行写操作。由于完全实现了发布... <b>数据</b>冗余很有帮助。[8...
使用 Python 客户端
# -*- coding: utf-8 -*-
from redisearch.client import Client, Query
from redisearch import TextField
client = Client('idx')
try:
client.drop_index()
except:
pass
client.create_index([TextField('txt')])
# Add a document
client.add_document('docCn1',
txt='Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。从盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。[8]',
language='chinese')
print client.search(Query('数据').summarize().highlight().language('chinese')).docs[0].txt
# Outputs:
# <b>数据</b>?... <b>数据</b>进行写操作。由于完全实现了发布... <b>数据</b>冗余很有帮助。[8...
使用自定义词典
如果您想使用自定义词典,您可以在模块级别加载模块时进行操作。FRISOINI
设置可以指向包含相关设置和词典文件路径的 friso.ini
文件的位置。
请注意,没有默认的 friso.ini
文件位置。RediSearch 自带其 friso.ini
和词典文件,这些文件在构建时被编译到模块二进制文件中。