From: <sp...@us...> - 2010-05-24 07:48:26
|
Revision: 6100 http://geonetwork.svn.sourceforge.net/geonetwork/?rev=6100&view=rev Author: sppigot Date: 2010-05-24 07:48:20 +0000 (Mon, 24 May 2010) Log Message: ----------- Speed up guiservice that retrieves metadata record Sources for large catalogs Don't process irrelevant fields in getTerms Thanks to Craig Jones @ eMii/IMOS Modified Paths: -------------- sandbox/BlueNetMEST/src/org/fao/geonet/guiservices/util/Sources.java sandbox/BlueNetMEST/src/org/fao/geonet/kernel/search/SearchManager.java Modified: sandbox/BlueNetMEST/src/org/fao/geonet/guiservices/util/Sources.java =================================================================== --- sandbox/BlueNetMEST/src/org/fao/geonet/guiservices/util/Sources.java 2010-05-24 05:58:30 UTC (rev 6099) +++ sandbox/BlueNetMEST/src/org/fao/geonet/guiservices/util/Sources.java 2010-05-24 07:48:20 UTC (rev 6100) @@ -23,13 +23,19 @@ package org.fao.geonet.guiservices.util; +import java.util.Vector; + +import jeeves.constants.Jeeves; import jeeves.interfaces.Service; import jeeves.resources.dbms.Dbms; import jeeves.server.ServiceConfig; import jeeves.server.context.ServiceContext; + import org.fao.geonet.GeonetContext; import org.fao.geonet.constants.Geonet; +import org.fao.geonet.kernel.search.SearchManager; import org.fao.geonet.kernel.setting.SettingManager; + import org.jdom.Element; //============================================================================= @@ -48,11 +54,26 @@ { GeonetContext gc = (GeonetContext) context.getHandlerContext(Geonet.CONTEXT_NAME); SettingManager sm =gc.getSettingManager(); + SearchManager searchMan=gc.getSearchmanager(); Dbms dbms = (Dbms) context.getResourceManager().open (Geonet.Res.MAIN_DB); - //--- create local node + Element response = new Element(Jeeves.Elem.RESPONSE); + //--- retrieve all defined sources + Element nodes = dbms.select("SELECT uuid as siteId, name FROM Sources"); + + //--- only add sources that are actually in use + Vector usedSources = searchMan.getTerms("_source"); + + for (Object node: nodes.getChildren()) { + Element elNode = (Element)node; + String sourceId = elNode.getChildText("siteid"); + if (usedSources.contains(sourceId)) response.addContent((Element)(elNode.clone())); + } + + //--- add local node + String name = sm.getValue("system/site/name"); String siteId = sm.getValue("system/site/siteId"); @@ -61,15 +82,9 @@ local.addContent(new Element("name") .setText(name)); local.addContent(new Element("siteid").setText(siteId)); - //--- retrieve nodes from which metadata has been sourced + response.addContent(local); - Element nodes = dbms.select( - "SELECT uuid as siteId, name FROM Sources" + - " WHERE uuid in (SELECT distinct source FROM Metadata)"); - nodes.addContent(local); - - - return nodes; + return response; } } Modified: sandbox/BlueNetMEST/src/org/fao/geonet/kernel/search/SearchManager.java =================================================================== --- sandbox/BlueNetMEST/src/org/fao/geonet/kernel/search/SearchManager.java 2010-05-24 05:58:30 UTC (rev 6099) +++ sandbox/BlueNetMEST/src/org/fao/geonet/kernel/search/SearchManager.java 2010-05-24 07:48:20 UTC (rev 6100) @@ -551,9 +551,11 @@ try { TermEnum enu = reader.terms(new Term(fld, "")); - while (enu.next()) { - terms.add(enu.term().text()); - } + do { + Term term = enu.term(); + if (term.field() != fld) break; + terms.add(term.text()); + } while (enu.next()); return terms; } finally { releaseIndexReader(reader); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |