From e999fd609ceb0fb14049b0dc26005573a06f92cb Mon Sep 17 00:00:00 2001 From: Stefan Hardegger Date: Mon, 20 Jul 2026 12:01:24 +0200 Subject: [PATCH] solr fix --- .../com/storycove/service/SolrService.java | 41 +++++++++++++++++-- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/backend/src/main/java/com/storycove/service/SolrService.java b/backend/src/main/java/com/storycove/service/SolrService.java index 4654885..a249725 100644 --- a/backend/src/main/java/com/storycove/service/SolrService.java +++ b/backend/src/main/java/com/storycove/service/SolrService.java @@ -720,7 +720,16 @@ public class SolrService { throw e; } - logger.info("Successfully cleared all documents from both cores"); + // Clear collections core + try { + solrClient.deleteByQuery(properties.getCores().getCollections(), "*:*", + properties.getCommit().getCommitWithin()); + logger.info("Cleared all documents from collections core"); + } catch (Exception e) { + logger.warn("Failed to clear collections core (may not exist yet): {}", e.getMessage()); + } + + logger.info("Successfully cleared all documents from Solr cores"); } catch (Exception e) { logger.error("Failed to clear all documents", e); @@ -1384,9 +1393,33 @@ public class SolrService { } public void recreateCores() throws IOException { - logger.warn("Solr core recreation not supported through API - cores must be managed via Solr admin"); - // Note: Core recreation in Solr requires admin API calls that are typically done - // through the Solr admin interface or by restarting with fresh cores + List coreNames = Arrays.asList( + properties.getCores().getStories(), + properties.getCores().getAuthors(), + properties.getCores().getCollections() + ); + + for (String coreName : coreNames) { + try { + logger.info("Recreating Solr core: {}", coreName); + + // Unload the core and delete all index data + org.apache.solr.client.solrj.request.CoreAdminRequest.unloadCore( + coreName, true, true, solrClient); + logger.info("Unloaded core: {}", coreName); + + // Recreate the core from its configset (same name as the core) + org.apache.solr.client.solrj.request.CoreAdminRequest.Create createReq = + new org.apache.solr.client.solrj.request.CoreAdminRequest.Create(); + createReq.setCoreName(coreName); + createReq.setConfigSet(coreName); + createReq.process(solrClient); + logger.info("Recreated core: {}", coreName); + + } catch (SolrServerException e) { + logger.warn("Could not recreate core {} (may not exist yet): {}", coreName, e.getMessage()); + } + } } public void recreateIndices() throws IOException {