Оператор соответствия 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/, которая позволила бы мне это сделать.