Redis基础索引与搜索功能无法正常工作求助
问题解决:Redis JSON索引搜索无结果
问题原因
你创建的encoding字段使用默认TEXT类型,RedisSearch默认分词器会将包含连字符的utf-8拆分为utf和8两个独立词条,因此直接搜索@encoding:utf-8无法匹配到完整的字符串。
验证分词行为
执行以下命令查看分词结果:
FT.ANALYZE itemIdx "utf-8"
输出会显示分词后的结果:1) "utf" 2) "8",这证实了拆分行为。
解决方案
方法1:创建索引时指定KEYWORD分词器(推荐)
KEYWORD分词器会将整个字符串作为单个词条处理,适合编码格式这类无需分词的字段。删除旧索引后重新创建:
# 删除旧索引 FT.DROPINDEX itemIdx # 创建带KEYWORD分词器的索引 FT.CREATE itemIdx ON JSON PREFIX 1 36: SCHEMA $.encoding AS encoding TEXT NOSTEM WITH TOKENIZER KEYWORD # 重新插入数据 JSON.SET 36:1 $ '{"encoding":"utf-8"}'
此时执行搜索即可得到结果:
FT.SEARCH itemIdx '@encoding:utf-8'
方法2:关闭分词并禁用词干提取
如果不需要任何分词处理,也可以使用TOKENIZE OFF和NOSTEM参数:
FT.DROPINDEX itemIdx FT.CREATE itemIdx ON JSON PREFIX 1 36: SCHEMA $.encoding AS encoding TEXT NOSTEM TOKENIZE OFF JSON.SET 36:1 $ '{"encoding":"utf-8"}'
同样可以正常匹配搜索。
方法3:匹配分词后的词条(不推荐)
如果必须保留默认分词行为,可以搜索拆分后的单个词条:
FT.SEARCH itemIdx '@encoding:utf' # 或 FT.SEARCH itemIdx '@encoding:8'
但这无法满足精确匹配utf-8的需求。
内容的提问来源于stack exchange,提问作者JBalaguero
相关产品推荐
相关产品推荐

