fix: search endpoint — correct column name and DISTINCT/ORDER BY
- Fix Photo.created_at → Photo.added_at (column doesn't exist) - Fix Postgres DISTINCT + ORDER BY conflict by using a subquery for tag_id filtering instead of JOIN + DISTINCT on the outer query Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -102,12 +102,16 @@ async def hybrid_search(
|
|||||||
|
|
||||||
# If no text query, fall back to recent photos
|
# If no text query, fall back to recent photos
|
||||||
if not q:
|
if not q:
|
||||||
stmt = select(Photo.id).order_by(Photo.created_at.desc())
|
|
||||||
if tag_ids:
|
if tag_ids:
|
||||||
from app.models.tags import photo_tags
|
from app.models.tags import photo_tags
|
||||||
stmt = stmt.join(photo_tags, Photo.id == photo_tags.c.photo_id).where(
|
# Subquery to get distinct photo_ids matching the tag filter
|
||||||
|
sub = select(photo_tags.c.photo_id).where(
|
||||||
photo_tags.c.tag_id.in_(tag_ids)
|
photo_tags.c.tag_id.in_(tag_ids)
|
||||||
).distinct()
|
).distinct().subquery()
|
||||||
|
stmt = select(Photo.id).join(sub, Photo.id == sub.c.photo_id)
|
||||||
|
else:
|
||||||
|
stmt = select(Photo.id)
|
||||||
|
stmt = stmt.order_by(Photo.added_at.desc())
|
||||||
if date_from:
|
if date_from:
|
||||||
stmt = stmt.where(Photo.taken_at >= date_from)
|
stmt = stmt.where(Photo.taken_at >= date_from)
|
||||||
if date_to:
|
if date_to:
|
||||||
|
|||||||
Reference in New Issue
Block a user