From 0e3ebac674364109faf17b1962cbc7a106479d62 Mon Sep 17 00:00:00 2001 From: gnosygnu Date: Thu, 2 Mar 2017 13:27:27 -0500 Subject: [PATCH] Full-text search: Notify pages searched --- .../fulltexts/cbks/Xosearch_fulltext_svc.java | 28 +++++++++++++------ .../specials/Xosearch_fulltext_special.java | 2 +- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/cbks/Xosearch_fulltext_svc.java b/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/cbks/Xosearch_fulltext_svc.java index 097021590..494697032 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/cbks/Xosearch_fulltext_svc.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/cbks/Xosearch_fulltext_svc.java @@ -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) { + byte[] wiki_domain = wiki.Domain_bry(); 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(); - + 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) ); finder.Init(query, case_match, auto_wildcard_bgn, auto_wildcard_end, Byte_ascii.Star, Byte_ascii.Dash); try { int found = 0; + int searched = 0; while (page_rdr.Move_next()) { int page_id = page_rdr.Read_int("page_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; finder.Match(text_mcase, 0, text_mcase.length, cbk_eval); + searched++; if (cbk_eval.found) { int ns_id = page_rdr.Read_int("page_namespace"); byte[] ttl_bry = page_rdr.Read_bry_by_str("page_title"); + Xoa_ttl ttl = wiki.Ttl_parse(ns_id, ttl_bry); ++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) { 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() - .Add_bry("wiki", wiki.Domain_bry()) + .Add_bry("wiki", wiki_domain) .Add_int("page_id", page_id) .Add_bry("page_ttl", ttl.Full_db()) - .Add_int("found", 0) ); 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 { 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) { if (ctx.Match(k, Invk__search)) this.Search((Xosearch_search_args)m.ReadObj("v")); diff --git a/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/specials/Xosearch_fulltext_special.java b/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/specials/Xosearch_fulltext_special.java index af17d6b81..594b77fd2 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/specials/Xosearch_fulltext_special.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/searchs/fulltexts/specials/Xosearch_fulltext_special.java @@ -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) { // 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;} public Xow_special_meta Special__meta() {return special__meta;} private final Xow_special_meta special__meta;