中文支持

Redis 开源版中搜索和查询的中文支持

从版本 0.99.0 开始,支持添加中文文档。

中文支持允许使用分词(Segmentation)而不是简单地使用空格和/或标点符号进行分词(Tokenization)来添加和处理中文文档。

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

中文分词是通过扫描输入文本,将每个字符或字符序列与预定义词典中的术语进行匹配,并根据周围的词语和字符确定最可能的匹配来实现的。

Redis 使用 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 和词典文件,这些文件在构建时编译到模块二进制文件中。

评价此页面
返回顶部 ↑