gpt4 book ai didi

redisearch - RediSearch 中的标签字段搜索评分

转载 作者:行者123 更新时间:2023-12-05 06:14:52 26 4
gpt4 key购买 nike

我正在执行一个 REDISEARCH 标签搜索查询,如下所示:

'@tags:{美食|餐厅|芝加哥}'

我想根据文档中这些标签的成功匹配次数对结果进行排序。

这样:

  • 包含所有 3 个标签的文档将排在第一位
  • 仅匹配其中 2 个的文档将排名第二
  • 只有 1 的文档将排在第三位。

这可能吗?如果是这样,请问我该如何执行这样的排序?

谢谢!

最佳答案

在当前状态下,这不直接在 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 可用于将几个查询组合成一个结果。

关于redisearch - RediSearch 中的标签字段搜索评分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62690411/

26 4 0