DEFINE FIELD full_text ON TABLE source TYPE option; REMOVE TABLE IF EXISTS source_chunk; REMOVE INDEX IF EXISTS idx_source_full ON TABLE source_chunk; DEFINE FIELD IF NOT EXISTS archived ON TABLE notebook TYPE option DEFAULT False; DEFINE INDEX idx_source_full ON TABLE source_chunk COLUMNS content SEARCH ANALYZER my_analyzer BM25 HIGHLIGHTS; REMOVE FUNCTION IF EXISTS fn::text_search; DEFINE FUNCTION IF NOT EXISTS fn::text_search($query_text: string, $match_count: int, $sources:bool, $show_notes:bool) { let $source_title_search = IF $sources {( SELECT id as item_id, math::max(search::score(1)) AS relevance FROM source WHERE title @1@ $query_text GROUP BY item_id)} ELSE { [] }; let $source_embedding_search = IF $sources {( SELECT source as item_id, math::max(search::score(1)) AS relevance FROM source_embedding WHERE content @1@ $query_text GROUP BY item_id)} ELSE { [] }; let $source_full_search = IF $sources {( SELECT source as item_id, math::max(search::score(1)) AS relevance FROM source WHERE full_text @1@ $query_text GROUP BY item_id)} ELSE { [] }; let $source_insight_search = IF $sources {( SELECT source as item_id, math::max(search::score(1)) AS relevance FROM source_insight WHERE content @1@ $query_text GROUP BY item_id)} ELSE { [] }; let $note_title_search = IF $show_notes {( SELECT id as item_id, math::max(search::score(1)) AS relevance FROM note WHERE title @1@ $query_text GROUP BY item_id)} ELSE { [] }; let $note_content_search = IF $show_notes {( SELECT id as item_id, math::max(search::score(1)) AS relevance FROM note WHERE content @1@ $query_text GROUP BY item_id)} ELSE { [] }; let $source_chunk_results = array::union($source_embedding_search, $source_full_search); let $source_asset_results = array::union($source_title_search, $source_insight_search); let $source_results = array::union($source_chunk_results, $source_asset_results ); let $note_results = array::union($note_title_search, $note_content_search ); let $final_results = array::union($source_results, $note_results ); RETURN (SELECT item_id, math::max(relevance) as relevance from $final_results group by item_id ORDER BY relevance DESC LIMIT $match_count); }; DEFINE EVENT IF NOT EXISTS source_delete ON TABLE source WHEN ($after == NONE) THEN { delete source_embedding where source == $before.id; delete source_insight where source == $before.id; }; DEFINE TABLE IF NOT EXISTS podcast_config SCHEMALESS; UPDATE open_notebook:database_info SET version= "0.0.2";