diff --git a/mycore-solr/src/main/java/org/mycore/solr/index/file/tika/MCRSolrRemoteTikaAccumulator.java b/mycore-solr/src/main/java/org/mycore/solr/index/file/tika/MCRSolrRemoteTikaAccumulator.java index 381d178ec5..a799aefd87 100644 --- a/mycore-solr/src/main/java/org/mycore/solr/index/file/tika/MCRSolrRemoteTikaAccumulator.java +++ b/mycore-solr/src/main/java/org/mycore/solr/index/file/tika/MCRSolrRemoteTikaAccumulator.java @@ -63,6 +63,8 @@ public class MCRSolrRemoteTikaAccumulator implements MCRSolrFileIndexAccumulator public static final String TIKA_MAPPER_MAX_FILE_SIZE = SOLR_CONFIG_PREFIX + "Tika.MaxFileSize"; + public static final String TIKA_EXTRACT_TEXT_ENDPOINT_PROPERTY = SOLR_CONFIG_PREFIX + "Tika.ExtractTextEndpoint"; + private static final Logger LOGGER = LogManager.getLogger(); private final Set tikaClients; @@ -88,7 +90,8 @@ public MCRSolrRemoteTikaAccumulator() { () -> MCRConfiguration2.createConfigurationException(TIKA_MAPPER_MAX_FILE_SIZE)); this.tikaClients = MCRConfiguration2.splitValue(serverList.orElse("")) - .map(MCRTikaHttpClient::new) + .map(baseUrl -> new MCRTikaHttpClient(baseUrl.trim(), + MCRConfiguration2.getString(TIKA_EXTRACT_TEXT_ENDPOINT_PROPERTY).orElseThrow().trim())) .collect(Collectors.toSet()); enabled = !tikaClients.isEmpty(); } diff --git a/mycore-solr/src/main/java/org/mycore/solr/index/file/tika/MCRTikaHttpClient.java b/mycore-solr/src/main/java/org/mycore/solr/index/file/tika/MCRTikaHttpClient.java index 49494ab116..1adfcc04fb 100644 --- a/mycore-solr/src/main/java/org/mycore/solr/index/file/tika/MCRTikaHttpClient.java +++ b/mycore-solr/src/main/java/org/mycore/solr/index/file/tika/MCRTikaHttpClient.java @@ -43,15 +43,23 @@ public class MCRTikaHttpClient { private final String url; + // default endpoint for Tika v2 and v3 / for v4 use 'tika/json/text' + private String extractTextEndpoint = "tika/text"; + public MCRTikaHttpClient(String url) { this.url = url.endsWith("/") ? url : url + "/"; + } + public MCRTikaHttpClient(String url, String extractTextEndpoint) { + this(url); + this.extractTextEndpoint = extractTextEndpoint.startsWith("/") + ? extractTextEndpoint.replaceFirst("^\\/+", "") : extractTextEndpoint; } public void extractText(InputStream is, ThrowingConsumer responseConsumer) throws IOException, T { HttpRequest httpPut = MCRSolrUtils.getRequestBuilder() - .uri(URI.create(url + "tika/text")) + .uri(URI.create(url + extractTextEndpoint)) .setHeader("Accept", "application/json") .PUT(HttpRequest.BodyPublishers.ofInputStream(() -> is)) .build(); diff --git a/mycore-solr/src/main/resources/components/solr/config/mycore.properties b/mycore-solr/src/main/resources/components/solr/config/mycore.properties index c12d0729e7..2040c9d82f 100644 --- a/mycore-solr/src/main/resources/components/solr/config/mycore.properties +++ b/mycore-solr/src/main/resources/components/solr/config/mycore.properties @@ -56,6 +56,9 @@ MCR.Solr.Tika.Mapper.x_tika_content.MultiValueField=true MCR.Solr.Tika.IgnoredFiles=/alto/.*[.]xml,/mets[.]xml +#ExtractTextEndpoint in Tika 4: tika/json/text +MCR.Solr.Tika.ExtractTextEndpoint=tika/text + # 1GB MCR.Solr.Tika.MaxFileSize=1073741824