From: <sp...@us...> - 2010-03-30 11:34:25
|
Revision: 5902 http://geonetwork.svn.sourceforge.net/geonetwork/?rev=5902&view=rev Author: sppigot Date: 2010-03-30 11:34:14 +0000 (Tue, 30 Mar 2010) Log Message: ----------- Refactor LuceneSearcher to use getIndexReader from SearchManager class This reduces global vars iin LuceneSearcher (yay). Also new LuceneSearcher does not cache hits from last search (this is not feasible for big search result sets) and with new design of LuceneSearcher we can remove external calls to invalidate current search result. :-) Modified Paths: -------------- sandbox/BlueNetMEST/docs/bluenetmest.html sandbox/BlueNetMEST/installer/installer-config.xml sandbox/BlueNetMEST/src/org/fao/geonet/kernel/search/LuceneSearcher.java sandbox/BlueNetMEST/src/org/fao/geonet/kernel/search/MetaSearcher.java sandbox/BlueNetMEST/src/org/fao/geonet/services/main/Search.java sandbox/BlueNetMEST/src/org/fao/geonet/services/metadata/Delete.java sandbox/BlueNetMEST/src/org/fao/geonet/services/metadata/MassiveDelete.java sandbox/BlueNetMEST/web/geonetwork/loc/en/xml/strings.xml Modified: sandbox/BlueNetMEST/docs/bluenetmest.html =================================================================== --- sandbox/BlueNetMEST/docs/bluenetmest.html 2010-03-30 10:49:38 UTC (rev 5901) +++ sandbox/BlueNetMEST/docs/bluenetmest.html 2010-03-30 11:34:14 UTC (rev 5902) @@ -1,11 +1,11 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> - <title>BlueNet Metadata Entry & Search Tool Version 1.3 (110310)</title> + <title>BlueNet Metadata Entry & Search Tool Version 1.4 Unstable</title> </head> <body> <div style="text-align: center;"><span style="color: rgb(255, 153, 0);">Welcome -to the BlueNet MEST Version 1.3 (110310) svn revision 5896</span> <br> +to the BlueNet MEST Version 1.4 (Unstable) svn revision ????</span> <br> </div> <br> The following sections outline a set of steps you should follow to Modified: sandbox/BlueNetMEST/installer/installer-config.xml =================================================================== --- sandbox/BlueNetMEST/installer/installer-config.xml 2010-03-30 10:49:38 UTC (rev 5901) +++ sandbox/BlueNetMEST/installer/installer-config.xml 2010-03-30 11:34:14 UTC (rev 5902) @@ -5,8 +5,8 @@ <!-- =================================================================================== --> <info> - <appname>BlueNetMEST_1.3_110310</appname> - <appversion>11th March 2010</appversion> + <appname>BlueNetMEST_1.4_Unstable</appname> + <appversion>30th March 2010</appversion> <authors> <author name="FAO GeoNetwork Team" email="Geo...@fa..."/> <author name="VAM WFP" email="va...@wf..."/> @@ -70,7 +70,7 @@ <packs> <pack name="Core" required="no" preselected="yes"> - <description>BlueNetMEST 1.3 110310 svn revision 5896</description> + <description>BlueNetMEST 1.4 Unstable svn revision ????</description> <fileset dir="docs" targetdir="$INSTALL_PATH/web/geonetwork/docs"> <exclude name="build/**"/> Modified: sandbox/BlueNetMEST/src/org/fao/geonet/kernel/search/LuceneSearcher.java =================================================================== --- sandbox/BlueNetMEST/src/org/fao/geonet/kernel/search/LuceneSearcher.java 2010-03-30 10:49:38 UTC (rev 5901) +++ sandbox/BlueNetMEST/src/org/fao/geonet/kernel/search/LuceneSearcher.java 2010-03-30 11:34:14 UTC (rev 5902) @@ -99,13 +99,11 @@ private String _styleSheetName; private Element _summaryConfig; - private IndexReader _reader; private Query _query; private Filter _filter; private QueryWrapperFilter _advancedFilter; private Boolean _advancedFilterSearch; private Sort _sort; - private TopFieldCollector _hits; private Element _request; private Element _elSummary; private FieldSelector _selector; @@ -134,17 +132,10 @@ //--------------------------------------------------------------------------- // MetaSearcher API - public void search(ServiceContext srvContext, Element request, ServiceConfig config) - throws Exception - { - try { - computeQuery(srvContext, request, config); - initSearchRange(srvContext); - performQuery(getTo()); // get enough hits to show a page - } finally { - _hits = null; - setValid(false); - } + public void search(ServiceContext srvContext, Element request, ServiceConfig config) throws Exception { + computeQuery(srvContext, request, config); + initSearchRange(srvContext); + performQuery(getFrom()-1, getTo()); // get enough hits to show a page } //--------------------------------------------------------------------------- @@ -154,8 +145,6 @@ { updateSearchRange(request); - if (!isValid()) performQuery(getTo()); // get enough hits to show a page - GeonetContext gc = null; if (srvContext != null) { gc = (GeonetContext) srvContext.getHandlerContext(Geonet.CONTEXT_NAME); @@ -164,9 +153,6 @@ String sFast = request.getChildText("fast"); boolean fast = sFast != null && sFast.equals("true"); - // srvContext.log("METASEARCHER " + _styleSheetName + " FROM: " + from + "(" + sFrom + ")"); // DEBUG - // srvContext.log("METASEARCHER " + _styleSheetName + " TO: " + to + "(" + sTo + ")"); // DEBUG - // build response Element response = new Element("response"); response.setAttribute("from", getFrom()+""); @@ -177,16 +163,20 @@ if (getTo() > 0) { - TopDocs tdocs = _hits.topDocs(getFrom()-1, getTo()); + Pair<IndexReader,TopDocs> results = performQuery(getFrom()-1, getTo()); // get enough hits to show a page + + IndexReader reader = results.one(); + TopDocs tdocs = results.two(); + int nrHits = getTo() - (getFrom()-1); if (tdocs.scoreDocs.length >= nrHits) { for(int i = 0; i < nrHits; i++) { Document doc = null; if (fast) { - doc = _reader.document(tdocs.scoreDocs[i].doc); // no selector + doc = reader.document(tdocs.scoreDocs[i].doc); // no selector } else { - doc = _reader.document(tdocs.scoreDocs[i].doc, _selector); + doc = reader.document(tdocs.scoreDocs[i].doc, _selector); } String id = doc.get("_id"); Element md = new Element ("md"); @@ -217,9 +207,6 @@ } } - _hits = null; - setValid(false); - return response; } @@ -241,17 +228,9 @@ //---------------------------------------------------------------------------- - public void close() - { - try { - if (_reader != null) { - _reader.close(); - _reader = null; - } - setValid(false); - } catch (IOException e) { e.printStackTrace(); } // DEBUG - } + public void close() {} + //---------------------------------------------------------------------------- // private setup, index, delete and search functions @@ -391,9 +370,9 @@ * if sort order option is set and not null */ - private void performQuery(int maxNumberOfHits) throws Exception + private Pair<IndexReader, TopDocs> performQuery(int startHit, int endHit) throws Exception { - _reader = IndexReader.open(_sm.getLuceneDir()); + IndexReader reader = _sm.getIndexReader(); List<Filter> filters = new ArrayList<Filter>(); @@ -414,20 +393,23 @@ boolean buildSummary = _elSummary == null; if (buildSummary) { // get as many results as instructed or enough for search summary - numHits = Math.max(_maxHitsInSummary,maxNumberOfHits); + numHits = Math.max(_maxHitsInSummary,endHit); } else { - numHits = maxNumberOfHits; + numHits = endHit; } - Pair<TopFieldCollector,Element> results = doSearchAndMakeSummary( numHits, _maxSummaryKeys, _language, _resultType, _summaryConfig, _reader, _query, cFilter, _sort, buildSummary); - _hits = results.one(); - _elSummary = results.two(); + Pair<TopFieldCollector,Element> results = doSearchAndMakeSummary( numHits, _maxSummaryKeys, _language, _resultType, _summaryConfig, reader, _query, cFilter, _sort, buildSummary); + TopFieldCollector tfc = results.one(); + _elSummary = results.two(); _numHits = Integer.parseInt(_elSummary.getAttributeValue("count")); + Log.debug(Geonet.SEARCH_ENGINE, "Hits found : "+_numHits+""); - - setValid(true); + + return Pair.read(reader, tfc.topDocs(startHit, endHit)); } + //--------------------------------------------------------------------------- + private Geometry getGeometry(Element request) throws Exception { String geomWKT = Util.getParam(request, Geonet.SearchResult.GEOMETRY, null); @@ -804,21 +786,22 @@ */ public Element getAll(int maxHits) throws Exception { - performQuery(maxHits); + Pair<IndexReader, TopDocs> results = performQuery(0, maxHits); + IndexReader reader = results.one(); + TopDocs tdocs = results.two(); Element response = new Element("response"); - if (_hits == null || _hits.getTotalHits() == 0) { + if (_numHits == 0) { response.setAttribute("from", 0 + ""); response.setAttribute("to", 0 + ""); return response; } - TopDocs tdocs = _hits.topDocs(0, maxHits); response.setAttribute("from", 1 + ""); response.setAttribute("to", tdocs.scoreDocs.length + ""); for ( ScoreDoc sdoc : tdocs.scoreDocs ) { - Document doc = _reader.document(sdoc.doc); // no selector here! + Document doc = reader.document(sdoc.doc); // no selector here! String id = doc.get("_id"); // FAST mode @@ -826,7 +809,6 @@ response.addContent(md); } - setValid(false); return response; } @@ -849,19 +831,18 @@ } }; - performQuery(maxHits); + Pair<IndexReader, TopDocs> results = performQuery(0, maxHits); + IndexReader reader = results.one(); + TopDocs tdocs = results.two(); List<String> response = new ArrayList<String>(); - TopDocs tdocs = _hits.topDocs(0, maxHits); - for ( ScoreDoc sdoc : tdocs.scoreDocs ) { - Document doc = _reader.document(sdoc.doc, uuidselector); + Document doc = reader.document(sdoc.doc, uuidselector); String uuid = doc.get("_uuid"); if (uuid != null) response.add(uuid); } - setValid(false); return response; } Modified: sandbox/BlueNetMEST/src/org/fao/geonet/kernel/search/MetaSearcher.java =================================================================== --- sandbox/BlueNetMEST/src/org/fao/geonet/kernel/search/MetaSearcher.java 2010-03-30 10:49:38 UTC (rev 5901) +++ sandbox/BlueNetMEST/src/org/fao/geonet/kernel/search/MetaSearcher.java 2010-03-30 11:34:14 UTC (rev 5902) @@ -60,11 +60,6 @@ //-------------------------------------------------------------------------------- // utilities - public void setValid(boolean valid) - { - _valid = valid; - } - protected void initSearchRange(ServiceContext srvContext) { // get from and to default values Modified: sandbox/BlueNetMEST/src/org/fao/geonet/services/main/Search.java =================================================================== --- sandbox/BlueNetMEST/src/org/fao/geonet/services/main/Search.java 2010-03-30 10:49:38 UTC (rev 5901) +++ sandbox/BlueNetMEST/src/org/fao/geonet/services/main/Search.java 2010-03-30 11:34:14 UTC (rev 5902) @@ -87,7 +87,7 @@ oldSelection = null; } - // perform the search and save search result into session + // perform the search and save search query into session MetaSearcher searcher; context.info("Creating searchers"); Modified: sandbox/BlueNetMEST/src/org/fao/geonet/services/metadata/Delete.java =================================================================== --- sandbox/BlueNetMEST/src/org/fao/geonet/services/metadata/Delete.java 2010-03-30 10:49:38 UTC (rev 5901) +++ sandbox/BlueNetMEST/src/org/fao/geonet/services/metadata/Delete.java 2010-03-30 11:34:14 UTC (rev 5902) @@ -125,12 +125,6 @@ Element elResp = new Element(Jeeves.Elem.RESPONSE); elResp.addContent(new Element(Geonet.Elem.ID).setText(id)); - // invalidate current result set set - MetaSearcher searcher = (MetaSearcher)context.getUserSession().getProperty(Geonet.Session.SEARCH_RESULT); - - if (searcher != null) - searcher.setValid(false); - return elResp; } Modified: sandbox/BlueNetMEST/src/org/fao/geonet/services/metadata/MassiveDelete.java =================================================================== --- sandbox/BlueNetMEST/src/org/fao/geonet/services/metadata/MassiveDelete.java 2010-03-30 10:49:38 UTC (rev 5901) +++ sandbox/BlueNetMEST/src/org/fao/geonet/services/metadata/MassiveDelete.java 2010-03-30 11:34:14 UTC (rev 5902) @@ -119,12 +119,6 @@ } } - // invalidate current result set - MetaSearcher searcher = (MetaSearcher)context.getUserSession().getProperty(Geonet.Session.SEARCH_RESULT); - - if (searcher != null) - searcher.setValid(false); - // -- for the moment just return the sizes - we could return the ids // -- at a later stage for some sort of result display return new Element(Jeeves.Elem.RESPONSE) Modified: sandbox/BlueNetMEST/web/geonetwork/loc/en/xml/strings.xml =================================================================== --- sandbox/BlueNetMEST/web/geonetwork/loc/en/xml/strings.xml 2010-03-30 10:49:38 UTC (rev 5901) +++ sandbox/BlueNetMEST/web/geonetwork/loc/en/xml/strings.xml 2010-03-30 11:34:14 UTC (rev 5902) @@ -621,7 +621,7 @@ <timeoutChoice value="10">after 10 seconds</timeoutChoice> <timeoutChoice value="20">after 20 seconds</timeoutChoice> <timeoutChoice value="30">after 30 seconds</timeoutChoice> - <title>BlueNet MEST Version 1.3 110310 - svn revision 5896</title> + <title>BlueNet MEST Version 1.4 Unstable - svn revision ????</title> <to>To</to> <tools>Tools</tools> <tooltips>Tooltips</tooltips> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |