RediSearch 中的标签字段搜索评分

Tag Field search scoring in RediSearch

我正在执行 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" 表示这场比赛没有得分,因此此处不考虑顺序进行计分。

我也尝试使用聚合引擎来执行此操作,但找不到创建有效计算匹配标签的管道的方法。

这似乎是一个直接的用法,我做了 file an issue for this

一些解决方法:

  1. 您也许可以使用 TEXT 字段和可选子句 ("~Food|~Restaurant|~Chicago"),但文本字段的属性会略有不同。
  2. RedisGears 可用于将几个查询组合成一个结果。