RediSearch 中的标签字段搜索评分
Tag Field search scoring in RediSearch
我正在执行 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。
一些解决方法:
- 您也许可以使用
TEXT
字段和可选子句 ("~Food|~Restaurant|~Chicago"
),但文本字段的属性会略有不同。
- RedisGears 可用于将几个查询组合成一个结果。
我正在执行 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。
一些解决方法:
- 您也许可以使用
TEXT
字段和可选子句 ("~Food|~Restaurant|~Chicago"
),但文本字段的属性会略有不同。 - RedisGears 可用于将几个查询组合成一个结果。