empty search is now allowed
This commit is contained in:
@@ -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<Hit> = 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.")
|
||||
})?;
|
||||
|
||||
Reference in New Issue
Block a user