empty search is now allowed
This commit is contained in:
@@ -25,7 +25,7 @@ pub struct SearcherService {
|
|||||||
pub pool: PgPool,
|
pub pool: PgPool,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Normalize diacritics in queries (no changes here)
|
// normalize_slovak_text function remains unchanged...
|
||||||
fn normalize_slovak_text(text: &str) -> String {
|
fn normalize_slovak_text(text: &str) -> String {
|
||||||
// ... function content is unchanged ...
|
// ... function content is unchanged ...
|
||||||
text.chars()
|
text.chars()
|
||||||
@@ -73,9 +73,48 @@ impl Searcher for SearcherService {
|
|||||||
let table_name = req.table_name;
|
let table_name = req.table_name;
|
||||||
let query_str = req.query;
|
let query_str = req.query;
|
||||||
|
|
||||||
|
// --- MODIFIED LOGIC ---
|
||||||
|
// If the query is empty, fetch the 5 most recent records.
|
||||||
if query_str.trim().is_empty() {
|
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);
|
let index_path = Path::new("./tantivy_indexes").join(&table_name);
|
||||||
if !index_path.exists() {
|
if !index_path.exists() {
|
||||||
@@ -98,15 +137,6 @@ impl Searcher for SearcherService {
|
|||||||
let searcher = reader.searcher();
|
let searcher = reader.searcher();
|
||||||
let schema = index.schema();
|
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(|_| {
|
let pg_id_field = schema.get_field("pg_id").map_err(|_| {
|
||||||
Status::internal("Schema is missing the 'pg_id' field.")
|
Status::internal("Schema is missing the 'pg_id' field.")
|
||||||
})?;
|
})?;
|
||||||
|
|||||||
Reference in New Issue
Block a user