Оператор соответствия PostgreSQL @@ в Django для пользовательского ранжирования полнотекстового поиска

Я использую полнотекстовый поиск в Django + PostgreSQL. Пока что различные конфигурации SearchRank не дают наилучшего упорядочивания в моем случае.

Однако, после некоторых экспериментов, то, что я хочу, я думаю, это значение ранга, которое

  • 1/(количество слов в поле), если поле соответствует поисковому запросу
  • >
  • 0 иначе

Что в необработанном SQL было бы:

(to_tsvector('english', title) @@ plainto_tsquery('english', 'my search query')) ::int::float / array_length(regexp_split_to_array(title, '\s+'), 1),

Как я могу псевдоним/аннотацию queryset, чтобы иметь такое поле в Django? Проблема, похоже, в том, что оператор соответствия @@ абстрагирован в Django - я не вижу никакой комбинации функций на https://docs.djangoproject.com/en/4.0/ref/contrib/postgres/search/, которая позволила бы мне это сделать.

Вернуться на верх