From 2652d5d9e7d84319ba71206ba51a3f3ccf069250 Mon Sep 17 00:00:00 2001 From: Stefan Hardegger Date: Thu, 18 Jun 2026 13:28:51 +0200 Subject: [PATCH] fix solr --- .../com/storycove/service/SolrService.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/backend/src/main/java/com/storycove/service/SolrService.java b/backend/src/main/java/com/storycove/service/SolrService.java index fd82ce4..c2b9401 100644 --- a/backend/src/main/java/com/storycove/service/SolrService.java +++ b/backend/src/main/java/com/storycove/service/SolrService.java @@ -12,8 +12,10 @@ import com.storycove.entity.Story; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServerException; +import org.apache.solr.client.solrj.request.schema.SchemaRequest; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.client.solrj.response.UpdateResponse; +import org.apache.solr.client.solrj.response.schema.SchemaResponse; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.SolrInputDocument; @@ -70,6 +72,40 @@ public class SolrService { } catch (Exception e) { logger.error("Failed to test Solr cores availability", e); } + + ensureStoriesSchemaFields(); + } + + private void ensureStoriesSchemaFields() { + String core = properties.getCores().getStories(); + ensureSchemaField(core, "lastCompletedAt", "pdate"); + } + + private void ensureSchemaField(String core, String fieldName, String fieldType) { + try { + // Check whether the field already exists + SchemaRequest.Field checkRequest = new SchemaRequest.Field(fieldName); + checkRequest.process(solrClient, core); + logger.debug("Solr field '{}' already exists in core '{}'", fieldName, core); + } catch (Exception notFound) { + // Field is absent — add it + try { + Map attrs = new LinkedHashMap<>(); + attrs.put("name", fieldName); + attrs.put("type", fieldType); + attrs.put("indexed", true); + attrs.put("stored", true); + SchemaRequest.AddField addRequest = new SchemaRequest.AddField(attrs); + SchemaResponse.UpdateResponse response = addRequest.process(solrClient, core); + if (response.getStatus() == 0) { + logger.info("Added Solr field '{}' (type={}) to core '{}'", fieldName, fieldType, core); + } else { + logger.warn("Unexpected status {} adding field '{}' to core '{}'", response.getStatus(), fieldName, core); + } + } catch (Exception addEx) { + logger.error("Failed to add Solr field '{}' to core '{}'", fieldName, core, addEx); + } + } } // ===============================