Index PDF and Office file contents via Apache Tika

Solr 10 dropped the ExtractingRequestHandler, so a dedicated Tika
container on the Solr VPS (Caddy route /tika/*, own basic-auth
credential; Tika itself has no auth) extracts file text during
indexing: TikaDownloadContentIndexer listens on
BeforeDocumentIsProcessedForIndexingEvent, resolves the file through
the existing DownloadFileResolver and appends the text (mime
whitelist, 30 MB cap, 100k chars, fail-soft) to the document's content
field. Extractions are cached in var/tika-cache keyed on
path+size+mtime - a full re-index of 177 downloads drops from 2:12 min
to 27 s, replacing a file re-extracts naturally. Datasheet
specifications ("625i", "genlock") are now searchable. Spec v1.15.
This commit is contained in:
orasche committed 2026-09-11 13:15:05 +02:00
1 parent 5bb4e374b4
commit 8c881d153c
9 files changed
+499 -6

No files matched your search

@@ -67,6 +67,21 @@ tt_content {
}
}
# Product Finder - only the category hierarchy for the filter selects.
# Placed once above the product lists; the front end filters the products
# those lists already delivered, client side, via ?cat= and ?subcat=.
vitec_productfinder < lib.contentElementWithHeader
vitec_productfinder {
fields {
content {
fields {
productfinder = USER
productfinder.userFunc = Evomedien\Vitec\UserFunc\ProductFinderJsonRenderer->render
}
}
}
}
# EXT:solr search results as JSON - the search endpoint for the React frontend
solr_pi_results < lib.contentElementWithHeader
solr_pi_results {
@@ -389,7 +404,14 @@ plugin.tx_solr.index.queue {
products = 1
products {
# sys_category titles - feeds the category facet
fields.category_stringM = SOLR_RELATION
fields.category_stringM {
localField = categories
multiValue = 1
}
type = tx_vitec_domain_model_product
additionalWhereClause = hideonwebsite = 0
fields {
title = title
content = SOLR_CONTENT
@@ -466,7 +488,15 @@ plugin.tx_solr.index.queue {
usecases = 1
usecases {
# market titles from the MM relation - feeds the market facet
fields.market_stringM = SOLR_RELATION
fields.market_stringM {
localField = markets
multiValue = 1
}
type = tx_vitec_domain_model_usecase
# no_index is the editorial opt-out per story (concept 2026-08-20)
additionalWhereClause = hideonwebsite = 0 AND no_index = 0
fields {
title = title
content = SOLR_CONTENT
@@ -495,6 +525,39 @@ plugin.tx_solr.index.queue {
}
}
# Solutions became indexable on 2026-09-11: the sitemap alignment gave all
# 39 records a detail_page (and slug). Same pattern as markets.
solutions = 1
solutions {
type = tx_vitec_domain_model_solution
additionalWhereClause = detail_page > 0
fields {
title = title
content = SOLR_CONTENT
content {
cObject = COA
cObject {
10 = TEXT
10.field = subtitle
10.noTrimWrap = || |
20 = TEXT
20.field = teaser
20.noTrimWrap = || |
30 = TEXT
30.field = description
30.noTrimWrap = || |
}
}
url = TEXT
url {
typolink {
parameter.field = detail_page
returnLast = url
}
}
}
}
news = 1
news {
type = tx_news_domain_model_news
@@ -580,6 +643,16 @@ plugin.tx_solr.search.faceting {
field = type
keepAllOptionsOnSelection = 1
}
market {
label = Market
field = market_stringM
keepAllOptionsOnSelection = 1
}
category {
label = Category
field = category_stringM
keepAllOptionsOnSelection = 1
}
}
}