Оценка поиска по полю тега в RediSearch

Я выполняю поиск только по тегу REDISEARCH следующим образом:

'@tags:{Еда|Ресторан|Чикаго}'

Я хотел бы отсортировать результат по количеству успешных совпадений этих тегов в документе.

Чтобы:

  • документ, содержащий все 3 тега, будет ранжироваться первым
  • документ, соответствующий только двум из них, будет занимать второе место
  • документ, соответствующий только 1, занял бы третье место.

Это возможно ? Если да, пожалуйста, как я могу выполнить такую ​​сортировку?

Спасибо!


person Gotys    schedule 02.07.2020    source источник
comment
Вы должны использовать поле тега?   -  person Guy Korland    schedule 07.07.2020


Ответы (1)


В текущем состоянии это не входит непосредственно в набор функций RediSearchemphasized text. Совпадающие теги не учитываются при подсчете очков. Пример:

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" указывает на то, что этому матчу не присвоены очки, поэтому порядок здесь не учитывается для целей подсчета очков.

Я также попытался сделать это с помощью механизма агрегации и не смог найти способ создать конвейер, который эффективно подсчитывал бы совпадающие теги.

Это похоже на прямое использование, я зарегистрировал проблему для этого.

Пара обходных путей:

  1. Возможно, вы сможете использовать поле TEXT и необязательные предложения ("~Food|~Restaurant|~Chicago"), но текстовое поле будет иметь немного другие свойства.
  2. RedisGears можно использовать для составления нескольких запросов в один результат.
person stockholmux    schedule 07.07.2020