r1557 - trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr
Author: bpoussin Date: 2013-03-07 19:49:25 +0100 (Thu, 07 Mar 2013) New Revision: 1557 Url: http://nuiton.org/projects/wikitty/repository/revisions/1557 Log: nettoyage refactore pour permettre de recuperer facilement l'instance du SolR Modified: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/SolrUtil.java trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySolrConstant.java Modified: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/SolrUtil.java =================================================================== --- trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/SolrUtil.java 2013-02-28 20:52:12 UTC (rev 1556) +++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/SolrUtil.java 2013-03-07 18:49:25 UTC (rev 1557) @@ -24,6 +24,7 @@ */ package org.nuiton.wikitty.storage.solr; +import java.io.File; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; @@ -36,11 +37,15 @@ import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServer; import org.apache.solr.client.solrj.SolrServerException; +import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.SolrInputDocument; +import org.apache.solr.core.CoreContainer; +import org.nuiton.util.ApplicationConfig; import org.nuiton.util.TimeLog; +import org.nuiton.wikitty.WikittyConfigOption; import org.nuiton.wikitty.WikittyException; import org.nuiton.wikitty.entities.FieldType; import org.nuiton.wikitty.entities.WikittyTreeNode; @@ -60,6 +65,62 @@ final static private Log log = LogFactory.getLog(SolrUtil.class); final static private TimeLog timeLog = new TimeLog(SolrUtil.class); + public static SolrServer getSolrServer(ApplicationConfig config) { + + boolean removeSystemSolrDirFactoryKey = false; + String solrDirFactoryKey = null; + boolean removeSystemSolrDataDirKey = false; + String solrDataDirKey = null; + + // init system env solr.data.dir + if (config != null) { + // choix du storage (file or Ram) + solrDirFactoryKey = + WikittyConfigOption.WIKITTY_SEARCHENGINE_SOLR_DIRECTORY_FACTORY.getKey(); + String solrDirFactory = config.getOption(solrDirFactoryKey); + if (solrDirFactory != null) { + removeSystemSolrDirFactoryKey = null == System.getProperty(solrDirFactoryKey); + System.setProperty(solrDirFactoryKey, solrDirFactory); + } + + // on utilise le directory que si on est pas en Ram + if (solrDirFactory != null && !solrDirFactory.contains("RAMDirectoryFactory")) { + solrDataDirKey = + WikittyConfigOption.WIKITTY_SEARCHENGINE_SOLR_DIRECTORY_DATA.getKey(); + String solrDataDir = config.getOption(solrDataDirKey); + // make sure that dir exists + if (solrDataDir != null) { + File file = new File(solrDataDir); + if (!file.exists() && !file.mkdirs()) { + throw new WikittyException(String.format( + "Can't create directory '%s'", solrDataDir)); + } + log.info(String.format("Use SolR directory '%s'", solrDataDir)); + removeSystemSolrDataDirKey = null == System.getProperty(solrDataDirKey); + System.setProperty(solrDataDirKey, solrDataDir); + } + } + } + + SolrServer result; + try { + CoreContainer.Initializer initializer = new CoreContainer.Initializer(); + CoreContainer solrCore = initializer.initialize(); + result = new EmbeddedSolrServer(solrCore, ""); + } catch (Exception eee) { + throw new WikittyException("SolR initialization error", eee); + } + + if (removeSystemSolrDirFactoryKey) { + System.clearProperty(solrDirFactoryKey); + } + if (removeSystemSolrDataDirKey) { + System.clearProperty(solrDataDirKey); + } + + return result; + } + /** * Recherche tous les TreeNode auquel appartient en Attachment l'objet passe * en parametre @@ -206,8 +267,14 @@ } QueryResponse result = solrServer.query(query); - long numGet = result.getResults().size(); - long numfound = result.getResults().getNumFound(); + long numGet = -1; + long numfound = -1; + try { + numGet = result.getResults().size(); + numfound = result.getResults().getNumFound(); + } catch (Exception eee) { + log.error("Can't show normal log because exception occur during param evaluation", eee); + } timeLog.log(start, "executeQuery", String.format( "nb result %s/%s query was '%s'", numGet, numfound, query)); if (log.isDebugEnabled()) { Modified: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java =================================================================== --- trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java 2013-02-28 20:52:12 UTC (rev 1556) +++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java 2013-03-07 18:49:25 UTC (rev 1557) @@ -107,9 +107,6 @@ /** JTA resource */ protected SolrResource solrResource; - /** CoreContainer used to init the server and close it when finished **/ - protected CoreContainer solrCore; - /** * Init wikitty search engine on solr embedded server. * @@ -119,62 +116,11 @@ public WikittySearchEngineSolr( ApplicationConfig config, WikittyExtensionStorage extensionStorage) { - boolean removeSystemSolrDirFactoryKey = false; - String solrDirFactoryKey = null; - boolean removeSystemSolrDataDirKey = false; - String solrDataDirKey = null; - - // init system env solr.data.dir - if (config != null) { - this.config = config; - // choix du storage (file or Ram) - solrDirFactoryKey = - WikittyConfigOption.WIKITTY_SEARCHENGINE_SOLR_DIRECTORY_FACTORY.getKey(); - String solrDirFactory = config.getOption(solrDirFactoryKey); - if (solrDirFactory != null) { - removeSystemSolrDirFactoryKey = null == System.getProperty(solrDirFactoryKey); - System.setProperty(solrDirFactoryKey, solrDirFactory); - } - - // on utilise le directory que si on est pas en Ram - if (solrDirFactory != null && !solrDirFactory.contains("RAMDirectoryFactory")) { - solrDataDirKey = - WikittyConfigOption.WIKITTY_SEARCHENGINE_SOLR_DIRECTORY_DATA.getKey(); - String solrDataDir = config.getOption(solrDataDirKey); - // make sure that dir exists - if (solrDataDir != null) { - File file = new File(solrDataDir); - if (!file.exists() && !file.mkdirs()) { - throw new WikittyException(String.format( - "Can't create directory '%s'", solrDataDir)); - } - log.info(String.format("Use SolR directory '%s'", solrDataDir)); - removeSystemSolrDataDirKey = null == System.getProperty(solrDataDirKey); - System.setProperty(solrDataDirKey, solrDataDir); - } - } - } - - try { - CoreContainer.Initializer initializer = new CoreContainer.Initializer(); - solrCore = initializer.initialize(); - solrServer = new EmbeddedSolrServer(solrCore, ""); - - fieldModifier = new FieldModifier(extensionStorage); - elementModifier = new ElementModifier(extensionStorage); - solrResource = new SolrResource(solrServer); - - } catch (Exception eee) { - throw new WikittyException("SolR initialization error", eee); - } - - if (removeSystemSolrDirFactoryKey) { - System.clearProperty(solrDirFactoryKey); - } - if (removeSystemSolrDataDirKey) { - System.clearProperty(solrDataDirKey); - } - + this.config = config; + solrServer = SolrUtil.getSolrServer(config); + fieldModifier = new FieldModifier(extensionStorage); + elementModifier = new ElementModifier(extensionStorage); + solrResource = new SolrResource(solrServer); } public ApplicationConfig getConfig() { @@ -190,7 +136,7 @@ try { // FIXME poussin 20100618 pourquoi n'est pas fait dans la transaction ? solrResource.init(); - solrServer.deleteByQuery("*:*"); + getSolrServer().deleteByQuery("*:*"); } catch (Exception eee) { throw new WikittyException("Error during clearing SolR data", eee); } @@ -239,11 +185,11 @@ // recuperation des documents Solr deja indexes, pour minimiser la reindexation Map<String, SolrDocument> dirtyObjectDoc = - SolrUtil.findAllById(solrServer, dirtyObject); + SolrUtil.findAllById(getSolrServer(), dirtyObject); Map<String, SolrDocument> dirtyParentDoc = - SolrUtil.findAllByParents(solrServer, dirtyParent); + SolrUtil.findAllByParents(getSolrServer(), dirtyParent); Map<String, SolrDocument> parents = - SolrUtil.findAllById(solrServer, dirtyParentParentId); + SolrUtil.findAllById(getSolrServer(), dirtyParentParentId); // On genere en meme temps la liste des attachments qui doivent // etre reindexe @@ -405,7 +351,7 @@ // list de tous les objets a supprimer Map<String, SolrDocument> removed = - SolrUtil.findAllById(solrServer, ids); + SolrUtil.findAllById(getSolrServer(), ids); // list des TreeNode supprimer Map<String, SolrDocument> treeNodeRemoved = new HashMap<String, SolrDocument>(); @@ -444,7 +390,7 @@ // recuperation des noeuds dont il faut modifier les attachments Map<String, SolrDocument> treeNodeAttachmentRemoved = - SolrUtil.findAllById(solrServer, treeNodeAttachmentRemovedId); + SolrUtil.findAllById(getSolrServer(), treeNodeAttachmentRemovedId); for (Map.Entry<String, SolrDocument> e : treeNodeAttachmentRemoved.entrySet()) { String id = e.getKey(); @@ -481,7 +427,7 @@ // list des TreeNode dont un des pere a ete supprime treeNodeParentRemoved = - SolrUtil.findAllByParents(solrServer, ids); + SolrUtil.findAllByParents(getSolrServer(), ids); // on commence par supprimer des noeuds a reindexer les noeuds supprimes treeNodeParentRemoved.keySet().removeAll(treeNodeRemoved.keySet()); @@ -617,7 +563,7 @@ if (attachmentInTree.size() > 0) { Map<String, SolrDocument> attachments = - SolrUtil.findAllById(solrServer, attachmentInTree.getAll()); + SolrUtil.findAllById(getSolrServer(), attachmentInTree.getAll()); for (String treeNodeId : attachmentInTree.getRemoved().keySet()) { for (String attId : attachmentInTree.getRemoved().get(treeNodeId)) { @@ -779,7 +725,7 @@ } } - QueryResponse resp = SolrUtil.executeQuery(solrServer, querySolr); + QueryResponse resp = SolrUtil.executeQuery(getSolrServer(), querySolr); SolrDocumentList solrResults = resp.getResults(); Map<String, List<FacetTopic>> facets = new HashMap<String, List<FacetTopic>>(); @@ -879,7 +825,7 @@ try { WikittyQueryResultTreeNode<String> result = null; - SolrDocument doc = SolrUtil.findById(solrServer, wikittyId); + SolrDocument doc = SolrUtil.findById(getSolrServer(), wikittyId); if (doc != null) { // on verifie que l'argument est bien un TreeNode if (doc.containsKey(TREENODE_DEPTH)) { @@ -906,7 +852,7 @@ String queryString = v.getSolrQuery(); SolrQuery querySolr = new SolrQuery(SOLR_QUERY_PARSER + queryString); - QueryResponse resp = SolrUtil.executeQuery(solrServer, querySolr); + QueryResponse resp = SolrUtil.executeQuery(getSolrServer(), querySolr); SolrDocumentList solrResults = resp.getResults(); Map<String, Integer> counts = new HashMap<String, Integer>(); @@ -1087,7 +1033,7 @@ * Method to destroy properly the search engine. Mainly used in tests */ protected void destroy() { - solrCore.shutdown(); + getSolrServer().shutdown(); } @Override @@ -1095,7 +1041,7 @@ try { // Create query with restriction Restriction2Solr restriction2Solr = new Restriction2Solr(transaction, fieldModifier); - String queryString = restriction2Solr.toSolr(criteria.getRestriction(), solrServer); + String queryString = restriction2Solr.toSolr(criteria.getRestriction(), getSolrServer()); SolrQuery query = new SolrQuery(SOLR_QUERY_PARSER + queryString); // Add paged @@ -1171,14 +1117,14 @@ if (facetCriteria != null) { for (Criteria facet : facetCriteria) { String queryFacet = - restriction2Solr.toSolr(facet.getRestriction(), solrServer); + restriction2Solr.toSolr(facet.getRestriction(), getSolrServer()); facetQueryToName.put(queryFacet, facet.getName()); query.addFacetQuery(queryFacet); } } } - QueryResponse resp = SolrUtil.executeQuery(solrServer, query); + QueryResponse resp = SolrUtil.executeQuery(getSolrServer(), query); SolrDocumentList solrResults = resp.getResults(); Map<String, List<org.nuiton.wikitty.search.FacetTopic>> facets = new HashMap<String, List<org.nuiton.wikitty.search.FacetTopic>>(); @@ -1280,7 +1226,7 @@ try { TreeNodeResult<String> result = null; - SolrDocument doc = SolrUtil.findById(solrServer, wikittyId); + SolrDocument doc = SolrUtil.findById(getSolrServer(), wikittyId); if (doc != null) { // on verifie que l'argument est bien un TreeNode if (doc.containsKey(TREENODE_DEPTH)) { @@ -1299,9 +1245,9 @@ Restriction2Solr restriction2Solr = new Restriction2Solr(transaction, fieldModifier); String queryString = restriction2Solr.toSolr( - treeCriteria.getRestriction(), solrServer); + treeCriteria.getRestriction(), getSolrServer()); SolrQuery query = new SolrQuery(SOLR_QUERY_PARSER + queryString); - QueryResponse resp = SolrUtil.executeQuery(solrServer, query); + QueryResponse resp = SolrUtil.executeQuery(getSolrServer(), query); SolrDocumentList solrResults = resp.getResults(); Map<String, Integer> counts = new HashMap<String, Integer>(); Modified: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySolrConstant.java =================================================================== --- trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySolrConstant.java 2013-02-28 20:52:12 UTC (rev 1556) +++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittySolrConstant.java 2013-03-07 18:49:25 UTC (rev 1557) @@ -39,8 +39,11 @@ */ public interface WikittySolrConstant { - /** Precise the query parser to use, is allow leading wildcard */ - static final public String SOLR_QUERY_PARSER = "{!lucene}"; // "{!wikitty}"; + /** + * Precise the query parser to use. Now this is configured in solrconfig.xml + * in the '/select' handler as {!lucene q.op=AND df=#fulltext}. + */ + static final public String SOLR_QUERY_PARSER = ""; /** * Prefix utiliser pour les champs ajouter lors de l'indexation. Ce prefix @@ -90,18 +93,6 @@ static final public String SUFFIX_SORTABLE = SOLR_WIKITTY_SUFFIX + "sortable"; -// FIXME REMOVE IT if search on multivalued work with new hack (specific sortable field -// static final public String SUFFIX_BINARY_MULTIVALUED = SOLR_WIKITTY_SUFFIX + "bim"; -// static final public String SUFFIX_BOOLEAN_MULTIVALUED = SOLR_WIKITTY_SUFFIX + "bm"; -// static final public String SUFFIX_NUMERIC_MULTIVALUED = SOLR_WIKITTY_SUFFIX + "dm"; -// static final public String SUFFIX_DATE_MULTIVALUED = SOLR_WIKITTY_SUFFIX + "dtm"; -// static final public String SUFFIX_STRING_MULTIVALUED = SOLR_WIKITTY_SUFFIX + "sm"; -// static final public String SUFFIX_WIKITTY_MULTIVALUED = SOLR_WIKITTY_SUFFIX + "wm"; - static final public String SUFFIX_STRING_LOWERCASE = SOLR_WIKITTY_SUFFIX + "c"; static final public String SUFFIX_STRING_FULLTEXT = SOLR_WIKITTY_SUFFIX + "t"; - -// FIXME REMOVE IT if search on multivalued work with new hack (specific sortable field -// public static final String SUFFIX_STRING_FULLTEXT_LOWERCASE = SOLR_WIKITTY_SUFFIX + "cm"; -// public static final String SUFFIX_STRING_FULLTEXT_MULTIVALUED = SOLR_WIKITTY_SUFFIX + "tm"; }
participants (1)
-
bpoussin@users.nuiton.org