Upgrade Information
Upgrade to 2026.3.0
- Added command
generic-data-index:cleanup:unused-indicesto delete managed indices not referenced by any alias.
Upgrade to 2026.1.0
PHP and Dependency Requirements
- Added support for
PHP8.5. - Removed support for
PHP8.3and Symfonyv6.
Removed ExtJS / Admin Classic
PimcoreGenericDataIndexBundleno longer implementsPimcoreBundleAdminClassicInterface.- Removed
BundleAdminClassicTrait.
Interface Changes
- Added optional
bool $forceReload = falseparameter to thebyId()method on the following interfaces:AssetSearchServiceInterface::byId(int $id, ?User $user = null, bool $forceReload = false)DataObjectSearchServiceInterface::byId(int $id, ?User $user = null, bool $forceReload = false)DocumentSearchServiceInterface::byId(int $id, ?User $user = null, bool $forceReload = false)ElementSearchServiceInterface::byId(ElementType $elementType, int $id, ?User $user = null, bool $forceReload = false)
- [Indexing] BC Break:
IndexQueueRepository::generateSelectQuery()signature changed. The method now accepts an associative$columnAliasesarray (alias => expression) instead of the previous positional$fieldsarray with a separate$idFieldparameter. Passing a numerically-indexed array will throw anInvalidArgumentException. All enqueue methods inEnqueueServiceand the element type adapters (AssetTypeAdapter,DocumentTypeAdapter,DataObjectTypeAdapter) have been updated accordingly. ThequoteParameters()helper method has been removed.
Installer / Messenger Transport Changes
- The bundle installer now implements
PostInstallCommandsProviderInterface. The post-install commandgeneric-data-index:update:index -ris automatically executed duringpimcore:installwhen using Install Profiles. Manual execution afterpimcore:bundle:installis still required. - The messenger transport DSN is now configurable via the
%pimcore.messenger.transport_dsn_prefix%container parameter (env:PIMCORE_MESSENGER_TRANSPORT_DSN_PREFIX) instead of being hardcoded todoctrine://default.
Upgrade to 2.5.6
- [Commands]
generic-data-index:deployment:reindexandgeneric-data-index:reindexnow exit with a non-zero status code when reindexing fails, instead of always returning0. Deployment pipelines executing these commands will now fail visibly on reindex errors — previously such errors were only printed while the process reported success. - [Indexing] Reindexing failures are no longer silently swallowed: if both the reindex and the fallback index recreation fail, the exception now propagates and the mapping checksum is not stored, so the reindex of the class definition is retried on the next run.
Upgrade to 2.5.4
- [Searching] The full-text search (
FullTextSearchmodifier) now defaults todefault_operator: ANDandflags: PHRASE|WHITESPACEfor better relevance and to treat characters like-and.as literal text.
Upgrade to 2.5.3
- [Indexing] Added
isReferencedfield to asset index to support filtering for unreferenced assets. - [Indexing] Fixed: Unpublished data objects are now correctly indexed in relation fields (ManyToOne, ManyToMany, AdvancedManyToMany)
Re-indexing required
After upgrading, execute the following command to re-index elements to include all modifications:
bin/console generic-data-index:update:index -r
Upgrade to 2.2.0
- [Indexing] Added
idcolumn as new primary key togeneric_data_index_queue. Run migrations after updating. - [Searching] Added
trackTotalHitsparameter toDefaultSearchServiceandSearchExecutionService. Default value:true(always compute accurate total hits, even beyond the search engine's threshold). Set tonullto use the engine's default threshold, or pass an integer for a specific limit.
Upgrade to 2.1.0
- Added support for Symfony 7
- [Indexing] Added sort index for documents
- [Indexing] Improved field collection indexing to prevent mapping conflicts when properties share a name but differ in type
- Reindex all elements to use the new features:
bin/console generic-data-index:update:index -r
Upgrade to 2.0.0
- [Indexing] Added inherited fields indicator to data object indexing
- [Indexing] Added functionality to enqueue dependent items
- [Indexing] Added class ID field for data object elements
- [Indexing] Index name prefix changed from e.g.
pimcore_cartopimcore_data-object_car. Old indices are not deleted automatically - delete them manually if necessary. - [Searching] Added
ClassIdsFiltermodifier to filter data objects by class ID or class name - Added
isElementLocked()toElementLockServicefor retrieving element lock status from the index - Reindex all elements to use the new features:
bin/console generic-data-index:update:index -r
Breaking Changes
- Removed deprecated alias
generic-data-index.opensearch-client. Usegeneric-data-index.search-clientinstead. - Replaced all deprecated OpenSearch namespace classes with DefaultSearch equivalents:
Pimcore\...\Model\OpenSearch→Pimcore\...\Model\DefaultSearchPimcore\...\Enum\SearchIndex\OpenSearch→Pimcore\...\Enum\SearchIndex\DefaultSearch
- Removed deprecated class
Pimcore\...\Exception\OpenSearch\SearchFailedException. UsePimcore\...\Exception\DefaultSearch\SearchFailedExceptioninstead. - Removed deprecated class
AsSearchModifierHandlerfrom OpenSearch namespace. UsePimcore\...\Attribute\Search\AsSearchModifierHandlerinstead. - Removed deprecated
AbstractAdapterclasses from OpenSearch namespace. UsePimcore\...\SearchIndexAdapter\DefaultSearch\...\AbstractAdapterinstead. - Added default
data-object_prefix to all data object class definition index names to avoid conflicts with other index names. - Added element type parameter to
getIdsmethod ofElementSearchResult. - Added
getSpecialPermissionsmethod toElementPermissionServiceInterfacefor workspace language permissions. - Removed layout permission from
DataObjectPermissions(not index-relevant). - Removed
isLockedproperty from index elements (now dynamically calculated). - Changed workspace permissions evaluation to align with Admin Classic permission system.
Interface Changes
- Added
PermissionTypes $permissionTypeparameter (default:PermissionTypes::LIST) to:AssetSearchServiceInterface::searchDocumentSearchServiceInterface::searchDataObjectSearchServiceInterface::searchElementSearchServiceInterface::search
- Search service
byIdmethods now return elements based onPermissionTypes::VIEW - Added type-specific interfaces:
AssetSearch→AssetSearchInterfaceDocumentSearch→DocumentSearchInterfaceElementSearch→ElementSearchInterface
- Search services now require type-specific search objects:
AssetSearchServiceInterface::searchrequiresAssetSearchInterfaceDocumentSearchServiceInterface::searchrequiresDocumentSearchInterfaceElementSearchServiceInterface::searchrequiresElementSearchInterface
SearchProviderInterfacenow returns type-specific search interfaces.
Upgrade to 1.3.0
- [Indexing] Added Elasticsearch support alongside OpenSearch (OpenSearch remains the default). To use Elasticsearch, update your Symfony configuration:
pimcore_generic_data_index:
index_service:
client_params:
client_name: default
client_type: 'elasticsearch'
- [Indexing] Introduced service alias
generic-data-index.search-client, replacing the deprecatedgeneric-data-index.opensearch-client(removed in 2.0). The alias provides aPimcore\SearchClient\SearchClientInterfaceinstance compatible with both OpenSearch and Elasticsearch. - OpenSearch namespace classes are deprecated. Use DefaultSearch namespace instead.
- Reindex all elements after upgrading or switching search engines:
bin/console generic-data-index:update:index
Upgrade to 1.1.0
- Reindex all elements to use the new features:
bin/console generic-data-index:update:index