如何执行按精确前缀匹配的搜索和过滤?
最后更新时间:2024 年 3 月 22 日
问题
如何执行按精确前缀匹配的搜索和过滤?
答案
如果您想按精确短语匹配 + 前缀进行搜索,并且在以下示例中不返回“Kowloon and New Kowloon”,则 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 字段。