mirror of
https://github.com/flibusta-apps/book_library_server.git
synced 2025-12-06 15:15:36 +01:00
Optimize search
This commit is contained in:
@@ -25,6 +25,8 @@ def upgrade():
|
|||||||
op.create_index(op.f('tgrm_authors_lfm'), 'authors', [sa.text("(last_name || ' ' || first_name || ' ' || middle_name)")] ,postgresql_using='gin', postgresql_ops={'description': 'gin_trgm_ops'})
|
op.create_index(op.f('tgrm_authors_lfm'), 'authors', [sa.text("(last_name || ' ' || first_name || ' ' || middle_name)")] ,postgresql_using='gin', postgresql_ops={'description': 'gin_trgm_ops'})
|
||||||
op.create_index(op.f('tgrm_authors_lf'), 'authors', [sa.text("(last_name || ' ' || first_name)")] ,postgresql_using='gin', postgresql_ops={'description': 'gin_trgm_ops'})
|
op.create_index(op.f('tgrm_authors_lf'), 'authors', [sa.text("(last_name || ' ' || first_name)")] ,postgresql_using='gin', postgresql_ops={'description': 'gin_trgm_ops'})
|
||||||
op.create_index(op.f('tgrm_authors_l'), 'authors', ['last_name'] ,postgresql_using='gin', postgresql_ops={'description': 'gin_trgm_ops'})
|
op.create_index(op.f('tgrm_authors_l'), 'authors', ['last_name'] ,postgresql_using='gin', postgresql_ops={'description': 'gin_trgm_ops'})
|
||||||
|
op.create_index(op.f('book_authors_book'), 'book_authors', ['book'], unique=False, postgresql_using='btree')
|
||||||
|
op.create_index(op.f('book_authors_author'), 'book_authors', ['author'], unique=False, postgresql_using='btree')
|
||||||
# ### end Alembic commands ###
|
# ### end Alembic commands ###
|
||||||
|
|
||||||
|
|
||||||
@@ -37,4 +39,6 @@ def downgrade():
|
|||||||
op.drop_index(op.f('tgrm_authors_lfm'), table_name='books')
|
op.drop_index(op.f('tgrm_authors_lfm'), table_name='books')
|
||||||
op.drop_index(op.f('tgrm_authors_lf'), table_name='books')
|
op.drop_index(op.f('tgrm_authors_lf'), table_name='books')
|
||||||
op.drop_index(op.f('tgrm_authors_l'), table_name='books')
|
op.drop_index(op.f('tgrm_authors_l'), table_name='books')
|
||||||
|
op.drop_index(op.f('book_authors_book'), table_name='book_authors')
|
||||||
|
op.drop_index(op.f('book_authors_author'), table_name='book_authors')
|
||||||
# ### end Alembic commands ###
|
# ### end Alembic commands ###
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ SELECT ARRAY(
|
|||||||
) as sml,
|
) as sml,
|
||||||
(
|
(
|
||||||
SELECT count(*) FROM book_authors
|
SELECT count(*) FROM book_authors
|
||||||
LEFT JOIN books ON books.id = book
|
LEFT JOIN books ON (books.id = book AND books.is_deleted = 'f')
|
||||||
WHERE author = authors.id AND books.is_deleted = 'f'
|
WHERE author = authors.id
|
||||||
) as books_count
|
) as books_count
|
||||||
FROM authors
|
FROM authors
|
||||||
WHERE (
|
WHERE (
|
||||||
@@ -26,8 +26,8 @@ SELECT ARRAY(
|
|||||||
) AND
|
) AND
|
||||||
EXISTS (
|
EXISTS (
|
||||||
SELECT * FROM book_authors
|
SELECT * FROM book_authors
|
||||||
LEFT JOIN books ON books.id = book
|
LEFT JOIN books ON (books.id = book AND books.is_deleted = 'f')
|
||||||
WHERE author = authors.id AND books.is_deleted = 'f'
|
WHERE author = authors.id
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
SELECT fauthors.id FROM filtered_authors as fauthors
|
SELECT fauthors.id FROM filtered_authors as fauthors
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ GET_OBJECT_IDS_QUERY = """
|
|||||||
SELECT ARRAY(
|
SELECT ARRAY(
|
||||||
WITH filtered_books AS (
|
WITH filtered_books AS (
|
||||||
SELECT id, similarity(title, :query) as sml FROM books
|
SELECT id, similarity(title, :query) as sml FROM books
|
||||||
WHERE books.title % :query
|
WHERE books.title % :query AND books.is_deleted = 'f'
|
||||||
)
|
)
|
||||||
SELECT fbooks.id FROM filtered_books as fbooks
|
SELECT fbooks.id FROM filtered_books as fbooks
|
||||||
ORDER BY fbooks.sml DESC, fbooks.id
|
ORDER BY fbooks.sml DESC, fbooks.id
|
||||||
|
|||||||
@@ -11,15 +11,15 @@ SELECT ARRAY (
|
|||||||
similarity(name, :query) as sml,
|
similarity(name, :query) as sml,
|
||||||
(
|
(
|
||||||
SELECT count(*) FROM book_sequences
|
SELECT count(*) FROM book_sequences
|
||||||
LEFT JOIN books ON books.id = book
|
LEFT JOIN books ON (books.id = book AND books.is_deleted = 'f')
|
||||||
WHERE sequence = sequences.id AND books.is_deleted = 'f'
|
WHERE sequence = sequences.id
|
||||||
) as books_count
|
) as books_count
|
||||||
FROM sequences
|
FROM sequences
|
||||||
WHERE name % :query AND
|
WHERE name % :query AND
|
||||||
EXISTS (
|
EXISTS (
|
||||||
SELECT * FROM book_sequences
|
SELECT * FROM book_sequences
|
||||||
LEFT JOIN books ON books.id = book
|
LEFT JOIN books ON (books.id = book AND books.is_deleted = 'f')
|
||||||
WHERE sequence = sequences.id AND books.is_deleted = 'f'
|
WHERE sequence = sequences.id
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
SELECT fsequences.id FROM filtered_sequences as fsequences
|
SELECT fsequences.id FROM filtered_sequences as fsequences
|
||||||
|
|||||||
Reference in New Issue
Block a user