如何对名称不同的语义上相似字段进行索引?

上次更新时间:2024 年 3 月 22 日

问题

如何对名称不同的语义上相似字段进行索引?

答案

举例来说:如果你想通过索引语义上相关的文档字段,并且键空间被分区到了两类键,你可能想按 价格 搜索,并且包含其名称的变种,比如说 成本。你有这么一个数据集

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

如果成本和价格互斥,那么可以使用 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"

参考

详细了解 查询语法 以自定义搜索操作。