Merge pull request #10627 from tdonohue/update_to_solr_9

Update to Solr 9 compatibility
This commit is contained in:
kshepherd
2025-04-23 16:11:06 +02:00
committed by GitHub
8 changed files with 40 additions and 22 deletions

View File

@@ -93,7 +93,7 @@ services:
additional_contexts:
solrconfigs: ./dspace/solr/
args:
SOLR_VERSION: "${SOLR_VER:-8.11}"
SOLR_VERSION: "${SOLR_VER:-9.8}"
networks:
dspacenet:
ports:
@@ -105,10 +105,15 @@ services:
volumes:
# Keep Solr data directory between reboots
- solr_data:/var/solr/data
# NOTE: We are not running Solr as "root", but we need root permissions to copy our cores to the mounted
# /var/solr/data directory. Then we start Solr as the "solr" user.
user: root
# Initialize all DSpace Solr cores then start Solr:
# * First, run precreate-core to create the core (if it doesn't yet exist). If exists already, this is a no-op
# * Second, copy configsets to this core:
# Updates to Solr configs require the container to be rebuilt/restarted: `docker compose -p d7 up -d --build dspacesolr`
# * Third, ensure all new folders are owned by "solr" user
# * Finally, start Solr as the "solr" user via the provided solr-foreground script
entrypoint:
- /bin/bash
- '-c'
@@ -126,7 +131,8 @@ services:
cp -r /opt/solr/server/solr/configsets/qaevent/* qaevent
precreate-core suggestion /opt/solr/server/solr/configsets/suggestion
cp -r /opt/solr/server/solr/configsets/suggestion/* suggestion
exec solr -f
chown -R solr:solr /var/solr
runuser -u solr -- solr-foreground
volumes:
assetstore:
pgdata:

View File

@@ -21,7 +21,7 @@ import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.SequenceGenerator;
import jakarta.persistence.Table;
import org.apache.solr.common.StringUtils;
import org.apache.commons.lang3.StringUtils;
import org.dspace.content.DSpaceObject;
import org.dspace.core.Context;
import org.dspace.core.HibernateProxyHelper;

View File

@@ -181,6 +181,11 @@ public abstract class IndexFactoryImpl<T extends IndexableObject, S> implements
*/
protected void addFacetIndex(SolrInputDocument document, String field, String sortValue, String authority,
String fvalue) {
// If facet value is null/blank, then we cannot index
if (StringUtils.isBlank(fvalue)) {
return;
}
// the separator for the filter can be eventually configured
String separator = DSpaceServicesFactory.getInstance().getConfigurationService()
.getProperty("discovery.solr.facets.split.char");

View File

@@ -27,7 +27,7 @@ import com.google.common.io.Files;
import com.opencsv.CSVReader;
import com.opencsv.exceptions.CsvException;
import org.apache.commons.lang3.function.TriFunction;
import org.apache.log4j.Logger;
import org.apache.logging.log4j.Logger;
import org.dspace.AbstractIntegrationTestWithDatabase;
import org.dspace.builder.CollectionBuilder;
import org.dspace.builder.CommunityBuilder;
@@ -52,7 +52,7 @@ public class MetadataExportFilteredItemsReportIT extends AbstractIntegrationTest
private int[][] itemCountPerSubjectThenPerAuthor = {{12, 15}, {9, 4}};
private String filename;
private Logger logger = Logger.getLogger(MetadataExportFilteredItemsReportIT.class);
private Logger logger = org.apache.logging.log4j.LogManager.getLogger();
private ConfigurationService configurationService = DSpaceServicesFactory.getInstance().getConfigurationService();
@Override

View File

@@ -26,10 +26,11 @@
<luceneMatchVersion>8.8.1</luceneMatchVersion>
<!-- Include contributed libraries that we use in DSpace. -->
<lib dir='${solr.install.dir}/contrib/analysis-extras/lib/'
regex='icu4j-.*\.jar'/>
<lib dir='${solr.install.dir}/contrib/analysis-extras/lucene-libs/'
regex='lucene-analyzers-icu-.*\.jar'/>
<!-- NOTE: When using Solr >=9.8, you MUST start Solr with `-Dsolr.config.lib.enabled=true` for this to work -->
<lib dir='${solr.install.dir}/modules/analysis-extras/lib/'
regex='icu4j-.*\.jar' />
<lib dir='${solr.install.dir}/modules/analysis-extras/lib/'
regex='lucene-analysis-icu-.*\.jar' />
<dataDir>${solr.data.dir:}</dataDir>

View File

@@ -26,10 +26,11 @@
<luceneMatchVersion>8.8.1</luceneMatchVersion>
<!-- Include contributed libraries that we use in DSpace. -->
<lib dir='${solr.install.dir}/contrib/analysis-extras/lib/'
regex='icu4j-.*\.jar'/>
<lib dir='${solr.install.dir}/contrib/analysis-extras/lucene-libs/'
regex='lucene-analyzers-icu-.*\.jar'/>
<!-- NOTE: When using Solr >=9.8, you MUST start Solr with `-Dsolr.config.lib.enabled=true` for this to work -->
<lib dir='${solr.install.dir}/modules/analysis-extras/lib/'
regex='icu4j-.*\.jar' />
<lib dir='${solr.install.dir}/modules/analysis-extras/lib/'
regex='lucene-analysis-icu-.*\.jar' />
<dataDir>${solr.data.dir:}</dataDir>

View File

@@ -24,12 +24,13 @@
-->
<config>
<luceneMatchVersion>8.8.1</luceneMatchVersion>
<!-- Include contributed libraries that we use in DSpace. -->
<lib dir='${solr.install.dir}/contrib/analysis-extras/lib/'
regex='icu4j-.*\.jar'/>
<lib dir='${solr.install.dir}/contrib/analysis-extras/lucene-libs/'
regex='lucene-analyzers-icu-.*\.jar'/>
<!-- NOTE: When using Solr >=9.8, you MUST start Solr with `-Dsolr.config.lib.enabled=true` for this to work -->
<lib dir='${solr.install.dir}/modules/analysis-extras/lib/'
regex='icu4j-.*\.jar' />
<lib dir='${solr.install.dir}/modules/analysis-extras/lib/'
regex='lucene-analysis-icu-.*\.jar' />
<dataDir>${solr.data.dir:}</dataDir>

View File

@@ -7,14 +7,18 @@
#
# To build use root as context for (easier) access to solr cfgs
# docker build --build-arg SOLR_VERSION=8.11 -f ./dspace/src/main/docker/dspace-solr/Dockerfile .
# docker build --build-arg SOLR_VERSION=9.8 -f ./dspace/src/main/docker/dspace-solr/Dockerfile .
# This will be published as dspace/dspace-solr:$DSPACE_VERSION
ARG SOLR_VERSION=8.11
ARG SOLR_VERSION=9.8
FROM docker.io/solr:${SOLR_VERSION}-slim
# NOTE: Cannot use the "-slim" image because it doesn't include the extra modules needed for DSpace (e.g. icu4j)
FROM docker.io/solr:${SOLR_VERSION}
ENV AUTHORITY_CONFIGSET_PATH=/opt/solr/server/solr/configsets/authority/conf \
# Customize SOLR_OPTS to enable "<lib>" tags in solrconfig.xml files
# Also set several environment variables to save configset paths used below
ENV SOLR_OPTS="-Dsolr.config.lib.enabled=true" \
AUTHORITY_CONFIGSET_PATH=/opt/solr/server/solr/configsets/authority/conf \
OAI_CONFIGSET_PATH=/opt/solr/server/solr/configsets/oai/conf \
SEARCH_CONFIGSET_PATH=/opt/solr/server/solr/configsets/search/conf \
STATISTICS_CONFIGSET_PATH=/opt/solr/server/solr/configsets/statistics/conf \