New TGRM search implementation

This commit is contained in:
2021-12-05 23:54:50 +03:00
parent 5fbe26c0f2
commit 7e825d099b
8 changed files with 91 additions and 74 deletions

View File

@@ -3,9 +3,32 @@ from app.models import Sequence
from app.services.common import TRGMSearchService
GET_OBJECTS_IDS_QUERY = """
EXPLAIN ANALYZE SELECT ARRAY (
WITH filtered_sequences AS (
SELECT
id,
similarity(name, :query) as sml,
(
SELECT count(*) FROM book_sequences
LEFT JOIN books ON books.id = book
WHERE sequence = sequences.id AND books.is_deleted = 'f'
) as books_count
FROM sequences
WHERE name % :query AND
EXISTS (
SELECT * FROM book_sequences
LEFT JOIN books ON books.id = book
WHERE sequence = sequences.id AND books.is_deleted = 'f'
)
)
SELECT fsequences.id FROM filtered_sequences as fsequences
ORDER BY fsequences.sml DESC, fsequences.books_count DESC
);
"""
class SequenceTGRMSearchService(TRGMSearchService):
MODEL_CLASS = Sequence
FIELDS = [
Sequence.Meta.table.c.name
]
PREFETCH_RELATED = ["source"]
GET_OBJECTS_IDS_QUERY = GET_OBJECTS_IDS_QUERY