mirror of
https://github.com/gnosygnu/xowa.git
synced 2024-10-27 20:34:16 +00:00
Full-text search: Add expand_options; clean up other options
This commit is contained in:
parent
688f276552
commit
0b762933b2
@ -23,11 +23,12 @@ public class Xofulltext_args_qry {
|
||||
public Xofulltext_cache_mgr cache_mgr;
|
||||
public Xofulltext_args_wiki[] wikis_ary;
|
||||
|
||||
public boolean expand_snips;
|
||||
public boolean show_all_snips;
|
||||
public boolean expand_options;
|
||||
public boolean case_match;
|
||||
public boolean auto_wildcard_bgn;
|
||||
public boolean auto_wildcard_end;
|
||||
public boolean expand_matches_section;
|
||||
public boolean show_all_matches;
|
||||
private boolean canceled;
|
||||
|
||||
public byte[] Qry_key(byte[] wiki, byte[] ns_ids) {
|
||||
@ -58,11 +59,13 @@ public class Xofulltext_args_qry {
|
||||
Set_prop(wiki_args, wikis_len, args, "limits");
|
||||
|
||||
rv.page_guid = args.Get_as_str("page_guid");
|
||||
rv.expand_snips = args.Get_as_bool_or("expand_snips", false);
|
||||
rv.show_all_snips = args.Get_as_bool_or("show_all_snips", false);
|
||||
rv.expand_options = args.Get_as_bool_or("expand_options", false);
|
||||
|
||||
rv.case_match = args.Get_as_bool_or("case_match", false);
|
||||
rv.auto_wildcard_bgn = args.Get_as_bool_or("auto_wildcard_bgn", false);
|
||||
rv.auto_wildcard_end = args.Get_as_bool_or("auto_wildcard_end", false);
|
||||
rv.expand_matches_section = args.Get_as_bool_or("expand_matches_section", false);
|
||||
rv.show_all_matches = args.Get_as_bool_or("show_all_matches", false);
|
||||
return rv;
|
||||
}
|
||||
private static void Set_prop(Xofulltext_args_wiki[] wikis, int wikis_len, Json_nde args, String key) {
|
||||
|
@ -60,13 +60,13 @@ public class Xofulltext_searcher__brute implements Xofulltext_searcher {
|
||||
|
||||
// do highlight
|
||||
if (found <= wiki_args.len) {
|
||||
cbk_highlight.Init(ui, args.qry_id, wiki, page_id, ttl.Full_db(), args.show_all_matches);
|
||||
cbk_highlight.Init(ui, args.qry_id, wiki, page_id, ttl.Full_db(), args.show_all_snips);
|
||||
ui.Send_page_add(new Xofulltext_searcher_page
|
||||
( args.qry_id
|
||||
, wiki_domain
|
||||
, page_id
|
||||
, ttl.Full_db()
|
||||
, args.expand_matches_section
|
||||
, args.expand_snips
|
||||
));
|
||||
finder.Match(text_mcase, 0, text_mcase.length, cbk_highlight);
|
||||
}
|
||||
|
@ -74,7 +74,7 @@ class Xofulltext_highlighter_mgr implements Gfo_invk {
|
||||
int page_id = item.page_id;
|
||||
Gflucene_highlighter_item[] lines = highlighter_mgr.Exec(searcher_data, item);
|
||||
for (Gflucene_highlighter_item line : lines) {
|
||||
ui.Send_line_add(true, searcher_args.show_all_matches, searcher_args.qry_id, wiki.Domain_bry(), page_id, line.num, Bry_.new_u8(line.text));
|
||||
ui.Send_line_add(true, searcher_args.show_all_snips, searcher_args.qry_id, wiki.Domain_bry(), page_id, line.num, Bry_.new_u8(line.text));
|
||||
}
|
||||
}
|
||||
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
|
||||
|
@ -75,7 +75,7 @@ public class Xofulltext_searcher__lucene implements Xofulltext_searcher {
|
||||
if (!wiki_args.ns_hash.Has(doc_data.ns_id)) continue;
|
||||
|
||||
// call page doc_data
|
||||
Xofulltext_searcher_page page = new Xofulltext_searcher_page(args.qry_id, wiki.Domain_bry(), doc_data.page_id, doc_data.page_full_db, args.expand_matches_section);
|
||||
Xofulltext_searcher_page page = new Xofulltext_searcher_page(args.qry_id, wiki.Domain_bry(), doc_data.page_id, doc_data.page_full_db, args.expand_snips);
|
||||
ui.Send_page_add(page);
|
||||
|
||||
full_list.Add(doc_data.page_id, doc_data);
|
||||
|
@ -19,7 +19,6 @@ import gplx.dbs.*;
|
||||
import gplx.xowa.specials.*; import gplx.langs.mustaches.*; import gplx.xowa.wikis.pages.*; import gplx.xowa.wikis.pages.tags.*;
|
||||
import gplx.xowa.addons.apps.cfgs.*;
|
||||
class Xofulltext_searcher_html extends Xow_special_wtr__base implements Mustache_doc_itm {
|
||||
private final boolean case_match, auto_wildcard_bgn, auto_wildcard_end, expand_matches_section, show_all_matches;
|
||||
private final Hash_adp props = Hash_adp_.New();
|
||||
public Xofulltext_searcher_html(Xocfg_mgr cfg_mgr, Gfo_qarg_mgr url_args, Xow_wiki wiki, Guid_adp page_guid) {
|
||||
String search_text = url_args.Read_str_or("search", "");
|
||||
@ -27,22 +26,34 @@ class Xofulltext_searcher_html extends Xow_special_wtr__base implements Mustache
|
||||
props.Add("qarg_search", search_text);
|
||||
props.Add("page_guid", page_guid.To_str());
|
||||
props.Add("cur_wiki", wiki.Domain_str());
|
||||
props_Add(cfg_mgr, url_args, "wikis" , wiki.Domain_str());
|
||||
props_Add(cfg_mgr, url_args, "ns_ids", "0");
|
||||
props_Add(cfg_mgr, url_args, "limits", "100");
|
||||
props_Add(cfg_mgr, url_args, "offsets", "0");
|
||||
props_Add_str(cfg_mgr, url_args, "wikis" , wiki.Domain_str(), false);
|
||||
props_Add_str(cfg_mgr, url_args, "ns_ids", "0");
|
||||
props_Add_str(cfg_mgr, url_args, "limits", "100");
|
||||
props_Add_str(cfg_mgr, url_args, "offsets", "0");
|
||||
|
||||
this.case_match = cfg_mgr.Get_bool_app_or("xowa.addon.search.fulltext.special.case_match", false);
|
||||
this.auto_wildcard_bgn = cfg_mgr.Get_bool_app_or("xowa.addon.search.fulltext.special.auto_wildcard_bgn", false);
|
||||
this.auto_wildcard_end = cfg_mgr.Get_bool_app_or("xowa.addon.search.fulltext.special.auto_wildcard_end", false);
|
||||
this.expand_matches_section = cfg_mgr.Get_bool_app_or("xowa.addon.search.fulltext.special.expand_matches_section", false);
|
||||
this.show_all_matches = cfg_mgr.Get_bool_app_or("xowa.addon.search.fulltext.special.show_all_matches", false);
|
||||
props_Add_bool(cfg_mgr, url_args, "expand_snips");
|
||||
props_Add_bool(cfg_mgr, url_args, "show_all_snips");
|
||||
props_Add_bool(cfg_mgr, url_args, "expand_options");
|
||||
props_Add_bool(cfg_mgr, url_args, "case_match");
|
||||
props_Add_bool(cfg_mgr, url_args, "auto_wildcard_bgn");
|
||||
props_Add_bool(cfg_mgr, url_args, "auto_wildcard_end");
|
||||
}
|
||||
private void props_Add(Xocfg_mgr cfg_mgr, Gfo_qarg_mgr url_args, String key, String dflt_val) {
|
||||
String cfg_key = "xowa.addon.search.fulltext.special.dflt_" + key;
|
||||
String cfg_val = cfg_mgr.Get_str_app_or(cfg_key, dflt_val);
|
||||
props.Add("dflt_" + key, cfg_val);
|
||||
props.Add("qarg_" + key, url_args.Read_str_or(key, cfg_val));
|
||||
private void props_Add_str(Xocfg_mgr cfg_mgr, Gfo_qarg_mgr url_args, String key, String else_val) {
|
||||
props_Add_str(cfg_mgr, url_args, key, else_val, true);
|
||||
}
|
||||
private void props_Add_str(Xocfg_mgr cfg_mgr, Gfo_qarg_mgr url_args, String key, String else_val, boolean use_cfg) {
|
||||
String dflt_val = else_val;
|
||||
if (use_cfg) {
|
||||
String cfg_key = "xowa.addon.search.fulltext.special." + key;
|
||||
dflt_val = cfg_mgr.Get_str_app_or(cfg_key, else_val);
|
||||
}
|
||||
props.Add("dflt_" + key, dflt_val);
|
||||
props.Add("qarg_" + key, url_args.Read_str_or(key, dflt_val));
|
||||
}
|
||||
private void props_Add_bool(Xocfg_mgr cfg_mgr, Gfo_qarg_mgr url_args, String key) {
|
||||
String cfg_key = "xowa.addon.search.fulltext.special." + key;
|
||||
boolean cfg_val = cfg_mgr.Get_bool_app_or(cfg_key, false);
|
||||
props.Add(key, cfg_val);
|
||||
}
|
||||
@Override protected Io_url Get_addon_dir(Xoa_app app) {return Addon_dir(app);}
|
||||
@Override protected Io_url Get_mustache_fil(Io_url addon_dir) {return addon_dir.GenSubFil_nest("bin", "xofulltext_searcher.main.template.html");}
|
||||
@ -80,12 +91,13 @@ class Xofulltext_searcher_html extends Xow_special_wtr__base implements Mustache
|
||||
}
|
||||
}
|
||||
public Mustache_doc_itm[] Mustache__subs(String key) {
|
||||
if (String_.Eq(key, "case_match")) return Mustache_doc_itm_.Ary__bool(case_match);
|
||||
else if (String_.Eq(key, "auto_wildcard_bgn")) return Mustache_doc_itm_.Ary__bool(auto_wildcard_bgn);
|
||||
else if (String_.Eq(key, "auto_wildcard_end")) return Mustache_doc_itm_.Ary__bool(auto_wildcard_end);
|
||||
else if (String_.Eq(key, "expand_matches_section")) return Mustache_doc_itm_.Ary__bool(expand_matches_section);
|
||||
else if (String_.Eq(key, "show_all_matches")) return Mustache_doc_itm_.Ary__bool(show_all_matches);
|
||||
return Mustache_doc_itm_.Ary__empty;
|
||||
Object val_obj = props.Get_by(key);
|
||||
if (val_obj == null) {
|
||||
return Mustache_doc_itm_.Ary__empty;
|
||||
}
|
||||
else {
|
||||
return Mustache_doc_itm_.Ary__bool((boolean)val_obj);
|
||||
}
|
||||
}
|
||||
public static Io_url Addon_dir(Xoa_app app) {
|
||||
return app.Fsys_mgr().Http_root().GenSubDir_nest("bin", "any", "xowa", "addon", "wiki", "fulltext", "searcher");
|
||||
|
@ -25,18 +25,20 @@ public class Xofulltext_searcher_bridge implements Bridge_cmd_itm {
|
||||
byte proc_id = proc_hash.Get_as_byte_or(data.Get_as_bry_or(Bridge_cmd_mgr.Msg__proc, null), Byte_ascii.Max_7_bit);
|
||||
Json_nde args = data.Get_kv(Bridge_cmd_mgr.Msg__args).Val_as_nde();
|
||||
switch (proc_id) {
|
||||
case Proc__search: svc.Search(args); break;
|
||||
case Proc__cancel: svc.Cancel(args); break;
|
||||
case Proc__search_run: svc.Search_run(args); break;
|
||||
case Proc__search_cxl: svc.Search_cxl(args); break;
|
||||
case Proc__options_save: svc.Options_save(args); break;
|
||||
case Proc__get_lines_rest: svc.Get_lines_rest(args); break;
|
||||
default: throw Err_.new_unhandled_default(proc_id);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
private static final byte Proc__search = 0, Proc__cancel = 1, Proc__get_lines_rest = 2;
|
||||
private static final byte Proc__search_run = 0, Proc__search_cxl = 1, Proc__options_save = 2, Proc__get_lines_rest = 3;
|
||||
private static final Hash_adp_bry proc_hash = Hash_adp_bry.cs()
|
||||
.Add_str_byte("search" , Proc__search)
|
||||
.Add_str_byte("cancel" , Proc__cancel)
|
||||
.Add_str_byte("search_run" , Proc__search_run)
|
||||
.Add_str_byte("search_cxl" , Proc__search_cxl)
|
||||
.Add_str_byte("options_save" , Proc__options_save)
|
||||
.Add_str_byte("get_lines_rest" , Proc__get_lines_rest)
|
||||
;
|
||||
|
||||
|
@ -33,8 +33,8 @@ class Xofulltext_searcher_svc implements Gfo_invk {
|
||||
public Xofulltext_searcher_svc(Xoa_app app) {
|
||||
this.app = app;
|
||||
}
|
||||
public void Cancel(Json_nde args) {this.Cancel(args.Get_as_str("page_guid"));}
|
||||
private void Cancel(String page_guid) {
|
||||
public void Search_cxl(Json_nde args) {this.Search_cxl(args.Get_as_str("page_guid"));}
|
||||
private void Search_cxl(String page_guid) {
|
||||
Xofulltext_args_qry prv_args = (Xofulltext_args_qry)wkr_hash.Get_by(page_guid);
|
||||
if (prv_args != null) {
|
||||
prv_args.Cancel();
|
||||
@ -43,29 +43,38 @@ class Xofulltext_searcher_svc implements Gfo_invk {
|
||||
}
|
||||
}
|
||||
}
|
||||
public void Search(Json_nde args) {
|
||||
public void Options_save(Json_nde args) {
|
||||
Xocfg_mgr cfg_mgr = app.Cfg();
|
||||
cfg_mgr.Set_bool_app("xowa.addon.search.fulltext.special.expand_options", args.Get_as_bool_or("expand_options", false));
|
||||
if (cfg_mgr.Get_bool_app_or("xowa.addon.search.fulltext.options.autosave_enabled", true)) {
|
||||
cfg_mgr.Set_bool_app("xowa.addon.search.fulltext.special.expand_snips", args.Get_as_bool_or("expand_snips", false));
|
||||
cfg_mgr.Set_bool_app("xowa.addon.search.fulltext.special.show_all_snips", args.Get_as_bool_or("show_all_snips", false));
|
||||
}
|
||||
}
|
||||
public void Search_run(Json_nde args) {
|
||||
// get search_args
|
||||
Xofulltext_args_qry search_args = Xofulltext_args_qry.New_by_json(args);
|
||||
search_args.cache_mgr = this.Cache_mgr();
|
||||
|
||||
// cancel any existing searches
|
||||
this.Cancel(search_args.page_guid);
|
||||
this.Search_cxl(search_args.page_guid);
|
||||
Compress_cache(wkr_hash);
|
||||
synchronized (wkr_hash) {
|
||||
wkr_hash.Add(search_args.page_guid, search_args);
|
||||
}
|
||||
|
||||
// autosave any changes if enabled
|
||||
Xocfg_mgr cfg_mgr = app.Cfg();
|
||||
if (cfg_mgr.Get_bool_app_or("xowa.addon.search.fulltext.options.autosave_enabled", true)) {
|
||||
cfg_mgr.Set_bool_app("xowa.addon.search.fulltext.special.case_match", search_args.case_match);
|
||||
cfg_mgr.Set_bool_app("xowa.addon.search.fulltext.special.auto_wildcard_bgn", search_args.auto_wildcard_bgn);
|
||||
cfg_mgr.Set_bool_app("xowa.addon.search.fulltext.special.auto_wildcard_end", search_args.auto_wildcard_end);
|
||||
cfg_mgr.Set_bool_app("xowa.addon.search.fulltext.special.expand_matches_section", search_args.expand_matches_section);
|
||||
cfg_mgr.Set_bool_app("xowa.addon.search.fulltext.special.show_all_matches", search_args.show_all_matches);
|
||||
// cfg_mgr.Set_int_app ("xowa.addon.search.fulltext.special.max_pages_per_wiki", search_args.max_pages_per_wiki);
|
||||
// cfg_mgr.Set_bry_app ("xowa.addon.search.fulltext.special.namespaces", search_args.namespaces);
|
||||
}
|
||||
// Xocfg_mgr cfg_mgr = app.Cfg();
|
||||
// if (cfg_mgr.Get_bool_app_or("xowa.addon.search.fulltext.options.autosave_enabled", true)) {
|
||||
// cfg_mgr.Set_bool_app("xowa.addon.search.fulltext.special.expand_snips", search_args.expand_snips);
|
||||
// cfg_mgr.Set_bool_app("xowa.addon.search.fulltext.special.show_all_snips", search_args.show_all_snips);
|
||||
// cfg_mgr.Set_bool_app("xowa.addon.search.fulltext.special.expand_options", search_args.expand_options);
|
||||
// cfg_mgr.Set_bool_app("xowa.addon.search.fulltext.special.case_match", search_args.case_match);
|
||||
// cfg_mgr.Set_bool_app("xowa.addon.search.fulltext.special.auto_wildcard_bgn", search_args.auto_wildcard_bgn);
|
||||
// cfg_mgr.Set_bool_app("xowa.addon.search.fulltext.special.auto_wildcard_end", search_args.auto_wildcard_end);
|
||||
//// cfg_mgr.Set_int_app ("xowa.addon.search.fulltext.special.max_pages_per_wiki", search_args.max_pages_per_wiki);
|
||||
//// cfg_mgr.Set_bry_app ("xowa.addon.search.fulltext.special.namespaces", search_args.namespaces);
|
||||
// }
|
||||
|
||||
// launch thread
|
||||
gplx.core.threads.Thread_adp_.Start_by_val("search", Cancelable_.Never, this, Invk__search, search_args);
|
||||
@ -129,13 +138,13 @@ class Xofulltext_searcher_svc implements Gfo_invk {
|
||||
for (int i = bgn; i < end; i++) {
|
||||
if (i >= max) return false; // more pages requested than available
|
||||
Xofulltext_cache_page page = (Xofulltext_cache_page)qry.Pages().Get_at(i);
|
||||
ui.Send_page_add(new Xofulltext_searcher_page(qry_id, wiki.Domain_bry(), page.Page_id(), page.Page_ttl(), args.expand_matches_section));
|
||||
ui.Send_page_add(new Xofulltext_searcher_page(qry_id, wiki.Domain_bry(), page.Page_id(), page.Page_ttl(), args.expand_snips));
|
||||
|
||||
// loop lines
|
||||
int lines_len = page.Lines().Len();
|
||||
for (int j = 0; j < lines_len; j++) {
|
||||
Xofulltext_cache_line line = (Xofulltext_cache_line)page.Lines().Get_at(j);
|
||||
ui.Send_line_add(false, args.show_all_matches, qry_id, wiki.Domain_bry(), page.Page_id(), line.Line_seq(), line.Line_html());
|
||||
ui.Send_line_add(false, args.show_all_snips, qry_id, wiki.Domain_bry(), page.Page_id(), line.Line_seq(), line.Line_html());
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
Loading…
Reference in New Issue
Block a user