feat(sok): bredare sok - hogtidsnamn, ingredienser och kock
Soket matchar nu aven hogtidsnamn (julafton -> julmat), ingredienser (lax -> alla laxrecept) och kocknamn (ramsay -> Gordon-recept), utover titel/trigram. Fortfarande inga falska traffar (pannkakor ger bara pannkakor).
This commit is contained in:
@@ -132,6 +132,13 @@ export async function recommendationRoutes(app: FastifyInstance) {
|
||||
? or(
|
||||
ilike(schema.recipes.titleSv, `%${q.search}%`),
|
||||
sql`similarity(${schema.recipes.titleSv}, ${q.search}) > 0.3`,
|
||||
// Högtidsnamn: "julafton"/"midsommar" → recept taggade med en högtid
|
||||
// vars slug eller namn ryms i söktermen (man slipper kunna exakt slug).
|
||||
sql`EXISTS (SELECT 1 FROM season_events se WHERE se.slug = ANY(${schema.recipes.holidayTags}) AND (lower(${q.search}) LIKE '%' || lower(se.slug) || '%' OR lower(${q.search}) LIKE '%' || lower(se.name_sv) || '%'))`,
|
||||
// Ingrediens: "lax"/"kyckling" → recept som innehåller en matchande ingrediens.
|
||||
sql`EXISTS (SELECT 1 FROM recipe_ingredients ri JOIN canonical_ingredients ci ON ci.id = ri.canonical_ingredient_id WHERE ri.recipe_id = ${schema.recipes.id} AND ci.name_sv ILIKE ${"%" + q.search + "%"})`,
|
||||
// Kock/källa: "ramsay"/"ottolenghi" → recept krediterade den kocken.
|
||||
ilike(schema.recipes.creatorDisplayName, `%${q.search}%`),
|
||||
)
|
||||
: q.holiday
|
||||
? sql`${q.holiday} = ANY(${schema.recipes.holidayTags})`
|
||||
|
||||
Reference in New Issue
Block a user