From 96d12992734c24c9e0a339f8943f27e5ab20cd88 Mon Sep 17 00:00:00 2001 From: gnosygnu Date: Sun, 19 Mar 2017 03:34:42 -0400 Subject: [PATCH] Full-text search: Print links to non main-namespace pages --- .../gflucenes/Xofulltext_highlighter_mgr.java | 11 ++------- .../Xofulltext_searcher__lucene.java | 24 +++++++++++++++---- .../gplx/gflucene/core/Gflucene_doc_data.java | 2 ++ 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/mgrs/gflucenes/Xofulltext_highlighter_mgr.java b/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/mgrs/gflucenes/Xofulltext_highlighter_mgr.java index 6fe3fc0d5..a60cb89b7 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/mgrs/gflucenes/Xofulltext_highlighter_mgr.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/mgrs/gflucenes/Xofulltext_highlighter_mgr.java @@ -29,7 +29,6 @@ class Xofulltext_highlighter_mgr implements Gfo_invk { private final Gflucene_searcher_qry searcher_data; private final Gflucene_highlighter_mgr highlighter_mgr = new Gflucene_highlighter_mgr(); private final Xoh_page hpg = new Xoh_page(); - private final Xowd_page_itm tmp_page_row = new Xowd_page_itm(); private final Ordered_hash list; private final Xofulltext_extractor extractor = new Xofulltext_extractor(); public Xofulltext_highlighter_mgr(Xofulltext_searcher_ui ui, Xow_wiki wiki, Xofulltext_searcher_args searcher_args, Gflucene_analyzer_data analyzer_data, Gflucene_searcher_qry searcher_data, Ordered_hash list) { @@ -59,15 +58,9 @@ class Xofulltext_highlighter_mgr implements Gfo_invk { highlighter_mgr.Term(); } private void Highlight_item(Gflucene_doc_data item) { - // load db.core.page - if (!wiki.Data__core_mgr().Db__core().Tbl__page().Select_by_id(tmp_page_row, item.page_id)) { - Gfo_usr_dlg_.Instance.Warn_many("", "", "search.highlight: could not find page; page_id=~{0}", item.page_id); - return; - } - // init hpg - Xoa_ttl page_ttl = wiki.Ttl_parse(tmp_page_row.Ns_id(), tmp_page_row.Ttl_page_db()); - Xoa_url page_url = wiki.Utl__url_parser().Parse(page_ttl.Page_db()); + Xoa_ttl page_ttl = wiki.Ttl_parse(item.page_full_db); + Xoa_url page_url = wiki.Utl__url_parser().Parse(page_ttl.Full_db()); hpg.Ctor_by_hview(wiki, page_url, page_ttl, item.page_id); // load db.html.html diff --git a/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/mgrs/gflucenes/Xofulltext_searcher__lucene.java b/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/mgrs/gflucenes/Xofulltext_searcher__lucene.java index 34ab2be75..41171e6d0 100644 --- a/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/mgrs/gflucenes/Xofulltext_searcher__lucene.java +++ b/400_xowa/src/gplx/xowa/addons/wikis/fulltexts/searchers/mgrs/gflucenes/Xofulltext_searcher__lucene.java @@ -19,6 +19,7 @@ import gplx.gflucene.core.*; import gplx.gflucene.indexers.*; import gplx.gflucene.searchers.*; import gplx.gflucene.highlighters.*; +import gplx.xowa.wikis.data.tbls.*; import gplx.xowa.addons.wikis.fulltexts.searchers.mgrs.uis.*; public class Xofulltext_searcher__lucene implements Xofulltext_searcher { private final Gflucene_searcher_mgr searcher = new Gflucene_searcher_mgr(); @@ -39,13 +40,28 @@ public class Xofulltext_searcher__lucene implements Xofulltext_searcher { // term searcher.Term(); - // loop list and send pages + // get page_load vars + Xowd_page_itm tmp_page_row = new Xowd_page_itm(); + Xowd_page_tbl page_tbl = wiki.Data__core_mgr().Db__core().Tbl__page(); + + // loop list and load pages int len = list.Len(); for (int i = 0; i < len; i++) { - Gflucene_doc_data found = (Gflucene_doc_data)list.Get_at(i); + Gflucene_doc_data doc_data = (Gflucene_doc_data)list.Get_at(i); - // call page found - Xofulltext_searcher_page page = new Xofulltext_searcher_page(args.query_id, wiki.Domain_str(), found.page_id, found.title, args.expand_matches_section); + // load page + if (!page_tbl.Select_by_id(tmp_page_row, doc_data.page_id)) { + Gfo_usr_dlg_.Instance.Warn_many("", "", "searcher.lucene: could not find page; page_id=~{0}", doc_data.page_id); + continue; + } + + // make page_ttl + Xoa_ttl page_ttl = wiki.Ttl_parse(tmp_page_row.Ns_id(), tmp_page_row.Ttl_page_db()); + doc_data.ns_id = tmp_page_row.Ns_id(); + doc_data.page_full_db = page_ttl.Full_db(); + + // call page doc_data + Xofulltext_searcher_page page = new Xofulltext_searcher_page(args.query_id, wiki.Domain_str(), doc_data.page_id, String_.new_u8(doc_data.page_full_db), args.expand_matches_section); ui.Send_page_add(page); } diff --git a/gplx.gflucene/src/gplx/gflucene/core/Gflucene_doc_data.java b/gplx.gflucene/src/gplx/gflucene/core/Gflucene_doc_data.java index 59694df2a..6f2848a70 100644 --- a/gplx.gflucene/src/gplx/gflucene/core/Gflucene_doc_data.java +++ b/gplx.gflucene/src/gplx/gflucene/core/Gflucene_doc_data.java @@ -17,7 +17,9 @@ package gplx.gflucene.core; import gplx.*; import gplx.gflucene.*; public class Gflucene_doc_data { public String title; public String body; + public int ns_id; public int page_id; + public byte[] page_full_db; public int score; public float lucene_score = 0; public Gflucene_doc_data(int page_id, int score, String title, String body) {