我正在执行这样的 REDISEARCH 标记仅搜索查询:
'@tags:{美食|餐厅|芝加哥}'
我想根据文档中这些标签的成功匹配数对结果进行排序。
以便:
- 包含所有 3 个标签的文档将排名第一
- 仅匹配其中 2 个的文档将排名第二
- 仅计算 1 的文档将排名第三。
这可能吗 ?如果是这样,请问我该如何执行这种排序?
谢谢!
我正在执行这样的 REDISEARCH 标记仅搜索查询:
'@tags:{美食|餐厅|芝加哥}'
我想根据文档中这些标签的成功匹配数对结果进行排序。
以便:
这可能吗 ?如果是这样,请问我该如何执行这种排序?
谢谢!
在当前状态下,这并不直接在 RediSearchemphasized 文本的功能集中。匹配的标签不计入分数。一个例子:
127.0.0.1:6379> ft.create test SCHEMA mytags TAG
OK
127.0.0.1:6379> ft.add test one 1 FIELDS mytags "aa"
OK
127.0.0.1:6379> ft.add test two 1 FIELDS mytags "aa,bb"
OK
127.0.0.1:6379> ft.add test three 1 FIELDS mytags "aa,bb,cc"
OK
127.0.0.1:6379> ft.add test four 1 FIELDS mytags "aa,bb"
OK
查询时,添加WITHSCORES
参数:
127.0.0.1:6379> FT.SEARCH test "@mytags:{aa|bb|cc}" WITHSCORES
1) (integer) 4
2) "four"
3) "inf"
4) 1) "mytags"
2) "aa,bb"
5) "three"
6) "inf"
7) 1) "mytags"
2) "aa,bb,cc"
8) "two"
9) "inf"
10) 1) "mytags"
2) "aa,bb"
11) "one"
12) "inf"
13) 1) "mytags"
2) "aa"
表示此"inf"
比赛没有得分,因此此处不考虑顺序以用于得分目的。
我还尝试使用聚合引擎来执行此操作,但找不到创建有效计算匹配标签的管道的方法。
这似乎是一个直接的用途,我确实为此提出了问题。
几个解决方法:
TEXT
字段和可选子句 ( "~Food|~Restaurant|~Chicago"
),但文本字段的属性会略有不同。