Redis Search中如何实现前缀与后缀匹配精准查询?
解决Redisearch精准匹配开头/结尾文档的问题
你遇到的问题是因为bar*这种查询是匹配文档任意位置中以bar开头的词,而非字段值以bar开头的文档。要实现精准筛选,有两种常用方法:
1. 用锚点匹配分词后的首尾词
Redisearch支持用^(行首锚点)和$(行尾锚点)限定匹配分词后的首尾term:
- 匹配字段中第一个词以
bar开头的文档:
这个命令会返回类似“bar baz”“bar”的文档,排除“foo bar”这种FT.SEARCH "our.domain.DocumentIdx" "^bar*"bar不在首位的结果。 - 如果要指定特定字段查询(避免其他字段干扰),加上字段名:
FT.SEARCH "our.domain.DocumentIdx" "@目标字段名:^bar*" - 匹配最后一个词以指定内容结尾的文档,用
$锚点:FT.SEARCH "our.domain.DocumentIdx" "*baz$"
2. 用正则表达式匹配字符串首尾
如果需要严格匹配整个字段字符串的开头/结尾(而非分词后的term),可以用Redisearch的正则查询语法:
- 匹配字段值以
bar开头的文档:FT.SEARCH "our.domain.DocumentIdx" "@目标字段名:/^bar/" - 匹配字段值以
baz结尾的文档:FT.SEARCH "our.domain.DocumentIdx" "@目标字段名:/baz$/"
注意:正则查询的性能略低于锚点查询,数据量较大时优先用锚点方案。
内容的提问来源于stack exchange,提问作者Amir Keshavarz
相关产品推荐
相关产品推荐

