diff --git a/dspace-discovery/dspace-discovery-provider/src/main/java/org/dspace/discovery/IndexClient.java b/dspace-discovery/dspace-discovery-provider/src/main/java/org/dspace/discovery/IndexClient.java index b0506de736..40e3e17dfb 100644 --- a/dspace-discovery/dspace-discovery-provider/src/main/java/org/dspace/discovery/IndexClient.java +++ b/dspace-discovery/dspace-discovery-provider/src/main/java/org/dspace/discovery/IndexClient.java @@ -109,6 +109,9 @@ public class IndexClient { options.addOption(OptionBuilder.isRequired(false).withDescription( "print this help message").create("h")); + options.addOption(OptionBuilder.isRequired(false).withDescription( + "optimize search solr core").create("o")); + try { line = new PosixParser().parse(options, args); } catch (Exception e) { @@ -141,6 +144,9 @@ public class IndexClient { } else if (line.hasOption("b")) { log.info("(Re)building index from scratch."); indexer.createIndex(context); + } else if (line.hasOption("o")) { + log.info("Optimizing search core."); + indexer.optimize(); } else { log.info("Updating and Cleaning Index"); indexer.cleanIndex(line.hasOption("f")); diff --git a/dspace-discovery/dspace-discovery-provider/src/main/java/org/dspace/discovery/IndexingService.java b/dspace-discovery/dspace-discovery-provider/src/main/java/org/dspace/discovery/IndexingService.java index f58d9e265a..b2551c0bc0 100644 --- a/dspace-discovery/dspace-discovery-provider/src/main/java/org/dspace/discovery/IndexingService.java +++ b/dspace-discovery/dspace-discovery-provider/src/main/java/org/dspace/discovery/IndexingService.java @@ -80,4 +80,6 @@ public interface IndexingService { void cleanIndex(boolean force) throws IOException, SQLException, SearchServiceException; + + void optimize(); } diff --git a/dspace-discovery/dspace-discovery-provider/src/main/java/org/dspace/discovery/SolrServiceImpl.java b/dspace-discovery/dspace-discovery-provider/src/main/java/org/dspace/discovery/SolrServiceImpl.java index 2528f1e4ee..164bd6ef8f 100644 --- a/dspace-discovery/dspace-discovery-provider/src/main/java/org/dspace/discovery/SolrServiceImpl.java +++ b/dspace-discovery/dspace-discovery-provider/src/main/java/org/dspace/discovery/SolrServiceImpl.java @@ -423,6 +423,25 @@ public class SolrServiceImpl implements SearchService, IndexingService { + } + + /** + * Maintenance to keep a SOLR index efficient. + * Note: This might take a long time. + */ + public void optimize() { + try { + long start = System.currentTimeMillis(); + System.out.println("SOLR Search Optimize -- Process Started:"+start); + getSolr().optimize(); + long finish = System.currentTimeMillis(); + System.out.println("SOLR Search Optimize -- Process Finished:"+finish); + System.out.println("SOLR Search Optimize -- Total time taken:"+(finish-start) + " (ms)."); + } catch (SolrServerException sse) { + System.err.println(sse.getMessage()); + } catch (IOException ioe) { + System.err.println(ioe.getMessage()); + } } // ////////////////////////////////// diff --git a/dspace/CHANGES b/dspace/CHANGES index b2757bac3e..d069652290 100644 --- a/dspace/CHANGES +++ b/dspace/CHANGES @@ -57,6 +57,7 @@ (Peter Dietz) - [DS-192] Bitstreams should be returned ordered - [DS-549] Added anchors in XMLUI +- [DS-615] Added ability to perform Solr optimize on the search/discovery core. (Stuart Lewis, Christophe Dupriez) - [DS-686] Incorrect use of UTF8 in DSpaceCSV