neos / content-repository-search
Common code and interface for a Neos CR search implementation
Fund package maintenance!
shop.neos.io/neosfunding
Installs: 370 157
Dependents: 4
Suggesters: 0
Security: 0
Stars: 10
Watchers: 9
Forks: 24
Open Issues: 5
Type:neos-package
Requires
- php: >=8.2
- neos/contentrepository-core: ^9.0 || dev-master
- neos/contentrepositoryregistry: ^9.0 || dev-master
- neos/flow: ^9.0 || dev-master
Replaces
- typo3/typo3cr-search: 5.0.4
This package is auto-updated.
Last update: 2025-06-21 14:16:33 UTC
README
A Neos Content Repository search common package used to implement concrete indexing and search functionality.
Related packages
Some of the related packages are:
Flowpack.ElasticSearch.ContentRepositoryAdaptor
To use Elasticsearch for indexing and searching.
Flowpack.SimpleSearch.ContentRepositoryAdaptor
Uses a SQLite database for indexing and search and thus can be used without additional dependencies.
Flowpack.SearchPlugin
A plugin to offer search functionality to users via Fusion rendering.
Realtime Indexing (experimental)
Realtime indexing in Neos.ContentRepository.Search >= 5.0 (compatible with Neos 9) has SEVERE PERFORMANCE PENALTYS when publishing workspaces. We suggest that you do batch indexing in the background instead.
To resolve backreferences (a very common Elasticsearch Use Case for Neos < 9), please now directly use the backReferences() FlowQuery operation available in Neos 9.
If you still want to enable this, add the following to the Settings.yaml (but you have been warned).
# Settings.yaml Neos: ContentRepositoryRegistry: presets: 'default': contentGraphProjection: catchUpHooks: 'Neos.ContentRepository.Search:RealtimeIndex': factoryObjectName: \Neos\ContentRepository\Search\CatchUpHook\RealTimeIndexCatchUpHookFactory
Inner workings
The NodeIndexingManager listens to signals emitted from Neos Content Repository and the PersistenceManager if
realtimeIndexing.enabled
is true
(which it defaults to).
nodeAdded
,nodeUpdated
,afterNodePublishing
triggerindexNode()
nodeRemoved
triggersremoveNode()
allObjectsPersisted
triggersflushQueues
During a single request the queue with index changes is only flushed once the indexingBatchSize
has been reached (see flushQueuesIfNeeded()
).
In case the operation queues are flushed, the IndexingManager
in turn uses the NodeIndexer
to run indexNode()
and removeNode()
respectively.
If realtimeIndexing.enabled
is false
, the node index is only updated when built manually.