diff --git a/packages/vitec/Configuration/Sets/Vitecset/setup.typoscript b/packages/vitec/Configuration/Sets/Vitecset/setup.typoscript index 497b9ec..37a1dfa 100755 --- a/packages/vitec/Configuration/Sets/Vitecset/setup.typoscript +++ b/packages/vitec/Configuration/Sets/Vitecset/setup.typoscript @@ -549,3 +549,40 @@ plugin.tx_solr.search.faceting { } } } + +# ============================================================================= +# Autocomplete endpoint: GET /search?type=7384&tx_solr[queryString]= +# Lean JSON page type (no page envelope) for type-ahead in the React search +# field. Response: { suggestions: {term: count}, suggestion, documents[], +# didSecondSearch }. +# 10 is deliberately USER_INT, not USER as in the shipped example: the example +# predates TYPO3 v14 (config.no_cache is gone), and a cached USER would pin +# the first query's suggestions for every later request. +# ============================================================================= +tx_solr_suggest = PAGE +tx_solr_suggest { + typeNum = 7384 + config { + disableAllHeaderCode = 1 + additionalHeaders.10.header = Content-Type: application/json; charset=utf-8 + } + + 10 = USER_INT + 10 { + userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run + extensionName = Solr + pluginName = pi_suggest + vendorName = ApacheSolrForTypo3 + controller = Suggest + action = suggest + } +} + +plugin.tx_solr.suggest = 1 +plugin.tx_solr.suggest { + numberOfSuggestions = 8 + suggestField = spell + # term suggestions only: the built-in top-results carry the raw document + # type and the full indexed content - too fat and off-contract for type-ahead + showTopResults = 0 +} diff --git a/packages/vitec/Documentation/Headless-JSON-Architecture.md b/packages/vitec/Documentation/Headless-JSON-Architecture.md index 789f759..e5ef0d0 100755 --- a/packages/vitec/Documentation/Headless-JSON-Architecture.md +++ b/packages/vitec/Documentation/Headless-JSON-Architecture.md @@ -25,7 +25,7 @@ | 1.9 | 2026‑08‑15 | **Interface change, partly breaking.** The four list plugins were unified: every one of them now emits an object carrying `layout`, the new `showToolbar` flag and its payload array. `vitec_usecaselist` and `vitec_productlist` previously emitted a **bare array** — front ends reading them have to move one level down (7.3, 7.14, 8). New plugin **`vitec_solutionlist`** (`SolutionListJsonRenderer`, key `solutions`), the counterpart 7.13.2 had been asking for since v1.2. `tx_vitec_domain_model_usecase` gained `detail_page`, emitted as the resolved `detailUrl` in the story card shape and therefore also in the `vitec_modelcard` story branch, which had carried no link at all until now. Noted: `vitec_productlist` had a configurable `layout` that was never serialised, and its vocabulary (`0`–`3`) differs from the other lists. | | 1.10 | 2026‑08‑18 | **Interface change (additive).** `tx_vitec_domain_model_product` gained five fields: `heroimage` (multiple FAL images, detail payload only), the richtext fields `description2`, `capabilities` and `textrelatedproducts`, and `portfolio` (TCA `link`) — emitted as a **resolved URL** through the new `LinkResolver::typolinkUrl()`. The product payloads are specified for the first time (7.15). Links in `contentelement` / `contentelementcta` that point at a **container** now resolve its children (`items`, page‑level shape) and `background` (7.4). Two record link handlers (`download`, `product`) added to the link browser, resolved server‑side per the new Clause 9.12; new middleware `vitec/download-file` streams `/download/file/` as a forced download (5.3), file lookup consolidated into `DownloadFileResolver` — first step towards the B‑4 target (10.2). Backend‑only: `relatedprodukt` moved from the Misc tab to General. Editorial: the document footer had been stuck at v1.7 since v1.8. | | 1.11 | 2026‑08‑21 | **New interface: site search.** Apache Solr 10 (dedicated VPS behind an HTTPS reverse proxy) with `apache-solr-for-typo3/solr` 14.0.0-RC1. The EXT:solr results plugin `solr_pi_results` on the search page is rendered headless by `SearchJsonRenderer` (payload key `search`) - request/response contract in the new Clause 7.16. Indexed corpus: pages plus product, market (`detail_page` only), use-case, news and download records; result `type` vocabulary `page\|product\|market\|story\|news\|download`. Downloads gained the canonical route `/download/` (uid route kept for the record links) and `private_download` is now enforced by `DownloadFileResolver` (5.3, 9.12). The VITEC Set now declares the solr set as a dependency - overriding a foreign set’s TypoScript requires loading after it (5.2). Editorial: the header table had been stuck at v1.9 since v1.10. | -| 1.12 | 2026‑08‑24 | **Interface change (additive).** The search endpoint (7.16) gained a type filter and facet counts: request parameter `filter` (a value from the `type` vocabulary; the natural name `type` is unavailable - it is TYPO3’s reserved page-type parameter), response keys `filter` (active filter or null) and `facets.type` (per-type document counts with `active` flags; counts stay complete while a filter is active, except when the filtered result is empty). Editorial baseline of 76 managed synonyms imported into `core_en` (codecs, acquired-brand names such as `exterity => avedia`, UK/US spellings, common misspellings) - synonyms apply at query time, no re-index. | +| 1.12 | 2026‑08‑24 | **Interface change (additive).** The search endpoint (7.16) gained a type filter and facet counts: request parameter `filter` (a value from the `type` vocabulary; the natural name `type` is unavailable - it is TYPO3’s reserved page-type parameter), response keys `filter` (active filter or null) and `facets.type` (per-type document counts with `active` flags; counts stay complete while a filter is active, except when the filtered result is empty). Editorial baseline of 76 managed synonyms imported into `core_en` (codecs, acquired-brand names such as `exterity => avedia`, UK/US spellings, common misspellings) - synonyms apply at query time, no re-index. New autocomplete endpoint: the EXT:solr suggest plugin as lean JSON page type 7384, deliberately USER_INT (7.16). | This document is drafted in the style of, and adopts the terminology conventions of, ISO/IEC/IEEE 42010 (architecture description), ISO/IEC/IEEE 26514 (information for @@ -974,6 +974,24 @@ hideonwebsite = 0`). Solutions are not indexed until they carry slugs or detail pages. Ranking boosts products (^10) and stories (^2). Every executed search is logged to `tx_solr_statistics` with the last two IP octets masked. +**Autocomplete.** `GET /search?type=7384&tx_solr[queryString]=` answers as +a lean JSON page type without the page envelope: + +```json +{ "suggestions": { "encoder": 118, "encoding": 171 }, + "suggestion": "enc", "documents": [], "didSecondSearch": false } +``` + +Term completions come from the index (spell field) with document counts; +synonyms and all indexed types are reflected automatically. The plugin is +wired as **USER_INT** - the example shipped with EXT:solr predates TYPO3 v14 +(`config.no_cache` no longer exists), and a cached USER would pin the first +query’s suggestions for every later request. Front ends should debounce +(~200 ms), start at 2-3 characters, and turn a picked suggestion into a +regular `/search?q=` request. Top-result documents are deliberately disabled +(`showTopResults = 0`): their shape is hardcoded upstream and carries the raw +document type and the full indexed content. + **Operations.** Indexing runs automatically: record and page saves enter the index queue, a scheduler task (Index Queue Worker, every 5 minutes) pushes them to Solr; the CLI command `vitec:solr-index` (with `--initialize` and `--debug`)