mirror of
https://github.com/lfnovo/open-notebook.git
synced 2026-05-04 22:30:36 +00:00
82 lines
2.9 KiB
Text
82 lines
2.9 KiB
Text
|
|
DEFINE FIELD full_text ON TABLE source TYPE option<string>;
|
|
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<bool> 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";
|