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:
1 parent
5bb4e374b4
commit
8c881d153c
9 files changed
+499
-6
No files matched your search
@@ -0,0 +1,58 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Product Finder - delivers the category hierarchy for the filter selects.
|
||||
One element per products page, placed above the product lists.
|
||||
-->
|
||||
<T3DataStructure>
|
||||
<sheets>
|
||||
<sDEF>
|
||||
<ROOT>
|
||||
<sheetTitle>Product Finder</sheetTitle>
|
||||
<type>array</type>
|
||||
<el>
|
||||
<settings.categoryRoot>
|
||||
<label>Category root</label>
|
||||
<description>The category whose children become the filter's main categories. Leave empty to use the product category tree ("Product").</description>
|
||||
<config>
|
||||
<type>select</type>
|
||||
<renderType>selectSingle</renderType>
|
||||
<foreign_table>sys_category</foreign_table>
|
||||
<foreign_table_where>AND sys_category.parent = 0 AND sys_category.sys_language_uid IN (-1,0) ORDER BY sys_category.title ASC</foreign_table_where>
|
||||
<items type="array">
|
||||
<numIndex index="0" type="array">
|
||||
<numIndex index="0">Product category tree (default)</numIndex>
|
||||
<numIndex index="1">0</numIndex>
|
||||
</numIndex>
|
||||
</items>
|
||||
<default>0</default>
|
||||
</config>
|
||||
</settings.categoryRoot>
|
||||
|
||||
<settings.sorting>
|
||||
<label>Sort categories by</label>
|
||||
<description>Applies to the main categories and their subcategories alike.</description>
|
||||
<config>
|
||||
<type>select</type>
|
||||
<renderType>selectSingle</renderType>
|
||||
<items type="array">
|
||||
<numIndex index="0" type="array">
|
||||
<numIndex index="0">Backend order (as arranged in the category tree)</numIndex>
|
||||
<numIndex index="1">sorting</numIndex>
|
||||
</numIndex>
|
||||
<numIndex index="1" type="array">
|
||||
<numIndex index="0">Alphabetically by title</numIndex>
|
||||
<numIndex index="1">title</numIndex>
|
||||
</numIndex>
|
||||
<numIndex index="2" type="array">
|
||||
<numIndex index="0">By uid</numIndex>
|
||||
<numIndex index="1">uid</numIndex>
|
||||
</numIndex>
|
||||
</items>
|
||||
<default>sorting</default>
|
||||
</config>
|
||||
</settings.sorting>
|
||||
</el>
|
||||
</ROOT>
|
||||
</sDEF>
|
||||
</sheets>
|
||||
</T3DataStructure>
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@ use TYPO3\CMS\Extbase\Utility\ExtensionUtility;
|
||||
};
|
||||
|
||||
$registerPluginWithFlexForm('Productlist', 'Show Products by Category', 'FILE:EXT:vitec/Configuration/FlexForms/Productlist.xml', 'vitec-plugin-productlist');
|
||||
$registerPluginWithFlexForm('Productfinder', 'Product Finder (filter data)', 'FILE:EXT:vitec/Configuration/FlexForms/Productfinder.xml', 'vitec-plugin-productlist');
|
||||
$registerPluginWithFlexForm('Simplecard', 'Simple Card', 'FILE:EXT:vitec/Configuration/FlexForms/Simplecard.xml', 'vitec-plugin-simplecard');
|
||||
$registerPluginWithFlexForm('Productshow', 'Show Single Product', 'FILE:EXT:vitec/Configuration/FlexForms/Productshow.xml', 'vitec-plugin-productshow');
|
||||
$registerPluginWithFlexForm('Usecaseshow', 'Single Success Story', 'FILE:EXT:vitec/Configuration/FlexForms/Usecase.xml', 'vitec-plugin-usecaseshow');
|
||||
|
||||
@@ -16,6 +16,14 @@ mod {
|
||||
CType = vitec_productlist
|
||||
}
|
||||
}
|
||||
productfinder {
|
||||
iconIdentifier = vitec-plugin-productlist
|
||||
title = Product Finder (filter data)
|
||||
description = Delivers the product category hierarchy for the filter selects. Place once above the product lists - it renders no products itself.
|
||||
tt_content_defValues {
|
||||
CType = vitec_productfinder
|
||||
}
|
||||
}
|
||||
productshow {
|
||||
iconIdentifier = vitec-plugin-productshow
|
||||
title = Show single VITEC Product
|
||||
|
||||
Reference in new issue
Block a user