如何通过完全前缀匹配来执行搜索和筛选?

上次更新 2024 年 3 月 22 日

问题

如何通过完全前缀匹配来执行搜索和筛选?

答案

如果您希望请求精确的短语匹配 + 前缀,那么不要在以下示例中返回“九龙和新界”,TEXT 索引类型不起作用。

FT.CREATE location_idx ON HASH PREFIX 1 location: SCHEMA Name AS name TEXT 

HSET location:1 Name "New York"
HSET location:2 Name "Newcastle" 
HSET location:3 Name "Kowloon and New Kowloon" 

This doesn't work:

FT.SEARCH location_idx "New*" RETURN 1 name
1) (integer) 3
2) "location:2"
3) 1) "name"
   2) "Newcastle"
4) "location:1"
5) 1) "name"
   2) "New York"
6) "location:3"
7) 1) "name"
   2) "Kowloon and New Kowloon"

解决方案是用 TAG 字段代替 TEXT。您应定义此索引。

FT.CREATE location_idx ON HASH PREFIX 1 location: SCHEMA Name AS name TAG

查询语法将是 "@name:{New*}"

FT.SEARCH location\_idx "@name:{New\*}" RETURN 1 name
1) (integer) 2
2) "location:1"
3) 1) "name"
 2) "New York"
4) "location:2"
5) 1) "name"
 2) "Newcastle"

参考

了解有关 TAG 字段 的更多信息。