Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUGFIX] Reestablish manipulation of EXT:indexed_search query #1087

Open
TYPO3IncTeam opened this issue Oct 18, 2024 · 1 comment
Open

[BUGFIX] Reestablish manipulation of EXT:indexed_search query #1087

TYPO3IncTeam opened this issue Oct 18, 2024 · 1 comment

Comments

@TYPO3IncTeam
Copy link
Collaborator

ℹ️ View this commit on Github
👥 Authored by Oliver Bartsch [email protected]
✔️ Merged by Oliver Bartsch [email protected]

Commit message

[BUGFIX] Reestablish manipulation of EXT:indexed_search query

Due to huge performance implications on
searching bigger sites, it's now possible
again to manipulate the QueryBuilder instance,
before the final indexed search query is executed.
This achieved by introducing a new PSR-14 event.

Additionally a @todo is resolved by adjusting
the repository to execute the final query
centrally in doSearch().

Resolves: #105007
Related: #97530
Related: #102937
Releases: main, 13.4
Change-Id: Ibf428be5f3554010fb9a18e8d030f7428ce5d954
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/86593
Tested-by: Garvin Hicking [email protected]
Reviewed-by: Benni Mack [email protected]
Reviewed-by: Garvin Hicking [email protected]
Tested-by: Oliver Bartsch [email protected]
Reviewed-by: Oliver Bartsch [email protected]
Tested-by: Benni Mack [email protected]
Tested-by: core-ci [email protected]

➕ Added files

13.4.x/Important-105007-ManipulationOfFinalSearchQueryInEXTindexed_search.rst
..  include:: /Includes.rst.txt

..  _important-105007-1728977233:

=============================================================================
Important: #105007 - Manipulation of final search query in EXT:indexed_search
=============================================================================

See :issue:`105007`

Description
===========

By removing the :typoscript:`searchSkipExtendToSubpagesChecking` option in
:issue:`97530`, there might have been performance implications for installations
with a lot of sites. This could be circumvented by adjusting the search query
manually, using available hooks. Since those hooks have also been removed with
:issue:`102937`, developers were no longer be able to handle the query
behaviour.

Therefore, the PSR-14 :php:`BeforeFinalSearchQueryIsExecutedEvent` has been
introduced which allows developers to manipulate the :php:`QueryBuilder`
instance again, just before the query gets executed.

Additional context information, provided by the new event:

* :php:`searchWords` - The corresponding search words list
* :php:`freeIndexUid` - Pointer to which indexing configuration should be searched in. 
  -1 means no filtering. 0 means only regular indexed content.

.. important::

    The provided query (the :php:`QueryBuilder` instance) is controlled by
    TYPO3 and is not considered public API. Therefore, developers using this
    event need to keep track of underlying changes by TYPO3. Such changes might
    be further performance improvements to the query or changes to the
    database schema in general.

Example
=======

..  code-block:: php

    <?php
    declare(strict_types=1);

    namespace MyVendor\MyExtension\EventListener;

    use TYPO3\CMS\Core\Attribute\AsEventListener;
    use TYPO3\CMS\IndexedSearch\Event\BeforeFinalSearchQueryIsExecutedEvent;

    final readonly class EventListener
    {
        #[AsEventListener(identifier: 'manipulate-search-query')]
        public function beforeFinalSearchQueryIsExecuted(BeforeFinalSearchQueryIsExecutedEvent $event): void
        {
            $event->queryBuilder->andWhere(
                $event->queryBuilder->expr()->eq('some_column', 'some_value')
            );
        }
    }

..  index:: PHP-API, ext:indexed_search
@linawolf
Copy link
Member

Event should also be mentioned in the manual of indexed search

linawolf added a commit to TYPO3-Documentation/TYPO3CMS-Reference-CoreApi that referenced this issue Nov 30, 2024
froemken pushed a commit to TYPO3-Documentation/TYPO3CMS-Reference-CoreApi that referenced this issue Dec 5, 2024
github-actions bot pushed a commit to TYPO3-Documentation/TYPO3CMS-Reference-CoreApi that referenced this issue Dec 5, 2024
froemken pushed a commit to TYPO3-Documentation/TYPO3CMS-Reference-CoreApi that referenced this issue Dec 5, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants