mirror of
https://github.com/patarapolw/cjdic2.git
synced 2026-11-09 17:39:35 +00:00
dynamic = rather than glob
This commit is contained in:
1 parent
7df0ad6066
commit
729f6635fc
1 file changed
+29
-27
+29
-27
@@ -54,8 +54,11 @@ impl YomitanDatabase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
new_t.push_str(&normalize_term(&new_seg));
|
new_t.push_str(&normalize_term(&new_seg));
|
||||||
|
|
||||||
let q_term_norm = new_t;
|
let q_term_norm = new_t;
|
||||||
|
|
||||||
|
let eq1 = if q_term_norm.len() > 0 { "GLOB" } else { "=" };
|
||||||
|
let eq2 = if q_reading.len() > 0 { "GLOB" } else { "=" };
|
||||||
|
|
||||||
let conn = self.db.conn.lock().unwrap();
|
let conn = self.db.conn.lock().unwrap();
|
||||||
|
|
||||||
conn.execute_batch(
|
conn.execute_batch(
|
||||||
@@ -74,11 +77,10 @@ impl YomitanDatabase {
|
|||||||
DELETE FROM yomitan_lookup_keys;
|
DELETE FROM yomitan_lookup_keys;
|
||||||
",
|
",
|
||||||
)?;
|
)?;
|
||||||
// let _timer = Timer::new(format!("search_yomitan: {} {}", q_term, q_reading));
|
|
||||||
|
|
||||||
conn.execute(
|
// let _timer = Timer::new(format!("search_yomitan: {} {}", q_term, q_reading));
|
||||||
&format!(
|
let sql_string = format!(
|
||||||
"
|
"
|
||||||
INSERT INTO yomitan_lookup_keys
|
INSERT INTO yomitan_lookup_keys
|
||||||
SELECT
|
SELECT
|
||||||
t.term,
|
t.term,
|
||||||
@@ -93,33 +95,33 @@ impl YomitanDatabase {
|
|||||||
FROM yomitan.terms t
|
FROM yomitan.terms t
|
||||||
JOIN yomitan.view_terms_term_rank tr ON tr.term = t.term AND tr.reading = t.reading
|
JOIN yomitan.view_terms_term_rank tr ON tr.term = t.term AND tr.reading = t.reading
|
||||||
JOIN yomitan.dictionaries d ON d.id = t.dict_id
|
JOIN yomitan.dictionaries d ON d.id = t.dict_id
|
||||||
WHERE t.term_norm GLOB ?1 {} t.reading GLOB ?2
|
WHERE t.term_norm {eq1} ?1 {and_or} t.reading {eq2} ?2
|
||||||
ORDER BY tr.max_score DESC, d.sort_order DESC
|
ORDER BY tr.max_score DESC, d.sort_order DESC
|
||||||
LIMIT ?3 OFFSET ?4
|
LIMIT ?3 OFFSET ?4
|
||||||
",
|
"
|
||||||
and_or
|
);
|
||||||
),
|
// println!("{}", sql_string);
|
||||||
params![q_term_norm, q_reading, limit, offset],
|
// still the most time bottleneck step, several seconds
|
||||||
)?;
|
conn.execute(&sql_string, params![q_term_norm, q_reading, limit, offset])?;
|
||||||
// let _timer = Timer::new(format!("search_yomitan: {} {}", q_term, q_reading));
|
|
||||||
|
|
||||||
|
// let _timer = Timer::new(format!("search_yomitan: {} {}", q_term, q_reading));
|
||||||
let mut stmt = conn.prepare(
|
let mut stmt = conn.prepare(
|
||||||
"
|
"
|
||||||
SELECT
|
SELECT
|
||||||
t.term,
|
t.term,
|
||||||
t.reading,
|
t.reading,
|
||||||
COALESCE(dt.tags, '') AS def_tags,
|
COALESCE(dt.tags, '') AS def_tags,
|
||||||
COALESCE(r.rules, '') AS rules,
|
COALESCE(r.rules, '') AS rules,
|
||||||
t.score,
|
t.score,
|
||||||
g.content AS glossary_json,
|
g.content AS glossary_json,
|
||||||
t.sequence,
|
t.sequence,
|
||||||
COALESCE(tt.tags, '') AS term_tags,
|
COALESCE(tt.tags, '') AS term_tags,
|
||||||
t.title AS dict_title
|
t.title AS dict_title
|
||||||
FROM yomitan_lookup_keys t
|
FROM yomitan_lookup_keys t
|
||||||
JOIN yomitan.glossaries g ON g.id = t.glossary_id
|
JOIN yomitan.glossaries g ON g.id = t.glossary_id
|
||||||
LEFT JOIN yomitan.def_tag_sets dt ON dt.id = t.def_tags_id
|
LEFT JOIN yomitan.def_tag_sets dt ON dt.id = t.def_tags_id
|
||||||
LEFT JOIN yomitan.rule_sets r ON r.id = t.rules_id
|
LEFT JOIN yomitan.rule_sets r ON r.id = t.rules_id
|
||||||
LEFT JOIN yomitan.term_tag_sets tt ON tt.id = t.term_tags_id
|
LEFT JOIN yomitan.term_tag_sets tt ON tt.id = t.term_tags_id
|
||||||
",
|
",
|
||||||
)?;
|
)?;
|
||||||
let rows = stmt.query_map(params![], |r| {
|
let rows = stmt.query_map(params![], |r| {
|
||||||
|
|||||||
Reference in new issue
Block a user