diff --git a/search/src/lib.rs b/search/src/lib.rs index d6dd39c..a7b6b32 100644 --- a/search/src/lib.rs +++ b/search/src/lib.rs @@ -25,7 +25,7 @@ pub struct SearcherService { pub pool: PgPool, } -// Normalize diacritics in queries (no changes here) +// normalize_slovak_text function remains unchanged... fn normalize_slovak_text(text: &str) -> String { // ... function content is unchanged ... text.chars() @@ -73,9 +73,48 @@ impl Searcher for SearcherService { let table_name = req.table_name; let query_str = req.query; + // --- MODIFIED LOGIC --- + // If the query is empty, fetch the 5 most recent records. if query_str.trim().is_empty() { - return Err(Status::invalid_argument("Query cannot be empty")); + info!( + "Empty query for table '{}'. Fetching default results.", + table_name + ); + let qualified_table = format!("gen.\"{}\"", table_name); + let sql = format!( + "SELECT id, to_jsonb(t) AS data FROM {} t ORDER BY id DESC LIMIT 5", + qualified_table + ); + + let rows = sqlx::query(&sql) + .fetch_all(&self.pool) + .await + .map_err(|e| { + Status::internal(format!( + "DB query for default results failed: {}", + e + )) + })?; + + let hits: Vec = rows + .into_iter() + .map(|row| { + let id: i64 = row.try_get("id").unwrap_or_default(); + let json_data: serde_json::Value = + row.try_get("data").unwrap_or_default(); + Hit { + id, + // Score is 0.0 as this is not a relevance-ranked search + score: 0.0, + content_json: json_data.to_string(), + } + }) + .collect(); + + info!("--- SERVER: Successfully processed empty query. Returning {} default hits. ---", hits.len()); + return Ok(Response::new(SearchResponse { hits })); } + // --- END OF MODIFIED LOGIC --- let index_path = Path::new("./tantivy_indexes").join(&table_name); if !index_path.exists() { @@ -98,15 +137,6 @@ impl Searcher for SearcherService { let searcher = reader.searcher(); let schema = index.schema(); - let prefix_edge_field = schema.get_field("prefix_edge").map_err(|_| { - Status::internal("Schema is missing the 'prefix_edge' field.") - })?; - let prefix_full_field = schema.get_field("prefix_full").map_err(|_| { - Status::internal("Schema is missing the 'prefix_full' field.") - })?; - let text_ngram_field = schema.get_field("text_ngram").map_err(|_| { - Status::internal("Schema is missing the 'text_ngram' field.") - })?; let pg_id_field = schema.get_field("pg_id").map_err(|_| { Status::internal("Schema is missing the 'pg_id' field.") })?;