mirror of
https://github.com/gnosygnu/xowa.git
synced 2024-10-27 20:34:16 +00:00
Full-text search: Notify pages searched
This commit is contained in:
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");
|
||||||
++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);
|
Xoa_ttl ttl = wiki.Ttl_parse(ns_id, ttl_bry);
|
||||||
|
++found;
|
||||||
|
|
||||||
|
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…
Reference in New Issue
Block a user