Full-text search: Notify pages searched

pull/620/head
gnosygnu 8 years ago
parent 389726f219
commit 0e3ebac674

@ -47,17 +47,19 @@ class Xosearch_fulltext_svc implements Gfo_invk {
} }
} }
private void Search_wiki(Xow_wiki wiki, byte[] query, boolean case_match, boolean auto_wildcard_bgn, boolean auto_wildcard_end, int max_pages_per_wiki, int max_snips_per_page) { private void Search_wiki(Xow_wiki wiki, byte[] query, boolean case_match, boolean auto_wildcard_bgn, boolean auto_wildcard_end, int max_pages_per_wiki, int max_snips_per_page) {
byte[] wiki_domain = wiki.Domain_bry();
Db_conn page_conn = wiki.Data__core_mgr().Tbl__page().Conn(); Db_conn page_conn = wiki.Data__core_mgr().Tbl__page().Conn();
Db_rdr page_rdr = page_conn.Stmt_sql("SELECT * FROM page WHERE page_namespace IN (0) ORDER BY page_score DESC").Exec_select__rls_auto(); Db_rdr page_rdr = page_conn.Stmt_sql("SELECT * FROM page WHERE page_namespace IN (0) ORDER BY page_score DESC").Exec_select__rls_auto();
app.Gui__cbk_mgr().Send_json(cbk_trg, "xo.search_fulltext.results__wiki__add__recv", gplx.core.gfobjs.Gfobj_nde.New() app.Gui__cbk_mgr().Send_json(cbk_trg, "xo.search_fulltext.results__wiki__add__recv", gplx.core.gfobjs.Gfobj_nde.New()
.Add_bry("wiki", wiki.Domain_bry()) .Add_bry("wiki", wiki_domain)
.Add_long("page_count", 0) .Add_long("page_count", 0)
); );
finder.Init(query, case_match, auto_wildcard_bgn, auto_wildcard_end, Byte_ascii.Star, Byte_ascii.Dash); finder.Init(query, case_match, auto_wildcard_bgn, auto_wildcard_end, Byte_ascii.Star, Byte_ascii.Dash);
try { try {
int found = 0; int found = 0;
int searched = 0;
while (page_rdr.Move_next()) { while (page_rdr.Move_next()) {
int page_id = page_rdr.Read_int("page_id"); int page_id = page_rdr.Read_int("page_id");
int text_db_id = page_rdr.Read_int("page_text_db_id"); int text_db_id = page_rdr.Read_int("page_text_db_id");
@ -65,34 +67,42 @@ class Xosearch_fulltext_svc implements Gfo_invk {
cbk_eval.found = false; cbk_eval.found = false;
finder.Match(text_mcase, 0, text_mcase.length, cbk_eval); finder.Match(text_mcase, 0, text_mcase.length, cbk_eval);
searched++;
if (cbk_eval.found) { if (cbk_eval.found) {
int ns_id = page_rdr.Read_int("page_namespace"); int ns_id = page_rdr.Read_int("page_namespace");
byte[] ttl_bry = page_rdr.Read_bry_by_str("page_title"); byte[] ttl_bry = page_rdr.Read_bry_by_str("page_title");
Xoa_ttl ttl = wiki.Ttl_parse(ns_id, ttl_bry);
++found; ++found;
app.Gui__cbk_mgr().Send_json(cbk_trg, "xo.search_fulltext.results__wiki__update__recv", gplx.core.gfobjs.Gfobj_nde.New()
.Add_bry("wiki", wiki.Domain_bry())
.Add_int("found", found)
);
Xoa_ttl ttl = wiki.Ttl_parse(ns_id, ttl_bry); Notify_pages_found_and_searched(wiki_domain, found, searched);
if (found <= max_pages_per_wiki) { if (found <= max_pages_per_wiki) {
cbk_highlight.Init(wiki, page_id, max_snips_per_page); cbk_highlight.Init(wiki, page_id, max_snips_per_page);
app.Gui__cbk_mgr().Send_json(cbk_trg, "xo.search_fulltext.results__page__add__recv", gplx.core.gfobjs.Gfobj_nde.New() app.Gui__cbk_mgr().Send_json(cbk_trg, "xo.search_fulltext.results__page__add__recv", gplx.core.gfobjs.Gfobj_nde.New()
.Add_bry("wiki", wiki.Domain_bry()) .Add_bry("wiki", wiki_domain)
.Add_int("page_id", page_id) .Add_int("page_id", page_id)
.Add_bry("page_ttl", ttl.Full_db()) .Add_bry("page_ttl", ttl.Full_db())
.Add_int("found", 0)
); );
finder.Match(text_mcase, 0, text_mcase.length, cbk_highlight); finder.Match(text_mcase, 0, text_mcase.length, cbk_highlight);
} }
} }
if (searched % 100 == 0) {
Notify_pages_found_and_searched(wiki_domain, found, searched);
}
} }
Notify_pages_found_and_searched(wiki_domain, found, searched);
} finally { } finally {
page_rdr.Rls(); page_rdr.Rls();
} }
} }
private void Notify_pages_found_and_searched(byte[] wiki, int found, int searched) {
app.Gui__cbk_mgr().Send_json(cbk_trg, "xo.search_fulltext.results__wiki__update__recv", gplx.core.gfobjs.Gfobj_nde.New()
.Add_bry("wiki", wiki)
.Add_int("found", found)
.Add_int("searched", searched)
);
}
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) { public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk__search)) this.Search((Xosearch_search_args)m.ReadObj("v")); if (ctx.Match(k, Invk__search)) this.Search((Xosearch_search_args)m.ReadObj("v"));

@ -19,7 +19,7 @@ public class Xosearch_fulltext_special implements Xow_special_page {
public void Special__gen(Xow_wiki wiki, Xoa_page page, Xoa_url url, Xoa_ttl ttl) { public void Special__gen(Xow_wiki wiki, Xoa_page page, Xoa_url url, Xoa_ttl ttl) {
// Gfo_qarg_mgr url_args = new Gfo_qarg_mgr().Init(url.Qargs_ary()); // Gfo_qarg_mgr url_args = new Gfo_qarg_mgr().Init(url.Qargs_ary());
new Xosearch_fulltext_html(false, false, false, 1000, 20, wiki.Domain_str(), "0|4").Bld_page_by_mustache(wiki.App(), page, this); new Xosearch_fulltext_html(false, false, false, 100, 20, wiki.Domain_str(), "0|4").Bld_page_by_mustache(wiki.App(), page, this);
} }
Xosearch_fulltext_special(Xow_special_meta special__meta) {this.special__meta = special__meta;} Xosearch_fulltext_special(Xow_special_meta special__meta) {this.special__meta = special__meta;}
public Xow_special_meta Special__meta() {return special__meta;} private final Xow_special_meta special__meta; public Xow_special_meta Special__meta() {return special__meta;} private final Xow_special_meta special__meta;

Loading…
Cancel
Save