如何索引名称不同但语义相似的字段?

最后更新于 2024 年 3 月 22 日

问题

如何索引名称不同但语义相似的字段?

答案

作为索引文档中语义相似字段的示例,如果键空间被划分为两类键,我们可能希望通过 price 进行搜索,并包含其名称的变体,例如 cost。对于这个数据集

JSON.SET prod:123 $ '{"name":"book","price":20}'
JSON.SET prod:124 $ '{"name":"chair","price":50}'
JSON.SET item:32 $ '{"name":"pen","cost":5}'

如果 cost 和 price 是互斥的,可以创建一个索引,使用 PREFIX 指定索引哪些类型的文档,然后在两个字段上创建索引。

FT.CREATE idx ON JSON PREFIX 2 prod: item: SCHEMA $.name AS name TEXT "$.['price','cost']" AS price NUMERIC

FT.SEARCH idx '@name:(book|pen|chair) @price:[5 30]' RETURN 2 '$.price' '$.cost'
1) (integer) 2
2) "item:32"
3) 1) "$.cost"
   2) "5"
4) "prod:123"
5) 1) "$.price"
   2) "20"

参考资料

了解更多关于查询语法以自定义搜索操作。