{"id":551715,"date":"2026-07-31T05:53:44","date_gmt":"2026-07-31T05:53:44","guid":{"rendered":"https:\/\/webkul.com\/blog\/?p=551715"},"modified":"2026-07-31T05:56:14","modified_gmt":"2026-07-31T05:56:14","slug":"pimcore-reindex","status":"publish","type":"post","link":"https:\/\/webkul.com\/blog\/pimcore-reindex\/","title":{"rendered":"Pimcore Reindex: Fix Objects Missing After Import"},"content":{"rendered":"<p>You ran an import. The rows landed in the database. But your Pimcore imported objects are not visible in Studio, and a Pimcore reindex is what you actually need.<\/p>\n<p>The tree is empty, the grid is empty, and search returns nothing.<\/p>\n<p>This guide targets Pimcore 12 with Studio and the <code>PimcoreGenericDataIndexBundle<\/code>. If you run the classic Pimcore 10 or 11 backend admin, the index model differs and this fix does not apply.<\/p>\n<p>This guide explains why it happens and how a Pimcore reindex plus a queue drain brings every object back into view.<\/p>\n<h2>What&#8217;s happening: Studio reads the index, not the DB<\/h2>\n<p>Pimcore 12 Studio does not read your MySQL tables to build the tree, grid, and search. It reads the OpenSearch generic data index instead.<\/p>\n<p>The <code>PimcoreGenericDataIndexBundle<\/code> maintains that index. When you save an object, a subscriber enqueues an index update, a consumer processes it, and OpenSearch gets the new document.<\/p>\n<p>So &#8220;pimcore objects in database but not in tree&#8221; is not a corruption bug. Your data is fine. The Pimcore OpenSearch index simply never received those documents.<\/p>\n<p>That is why a Pimcore reindex fixes it: the command re-reads the DB and pushes the missing objects back into the index. Studio then sees them.<\/p>\n<figure><img decoding=\"async\" class=\"alignnone size-full wp-image-551719\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-studio-tree-empty.webp\" alt=\"pimcore-reindex-studio-tree-empty\" width=\"1529\" height=\"757\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-studio-tree-empty.webp 1529w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-studio-tree-empty-300x149.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-studio-tree-empty-1200x594.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-studio-tree-empty-250x124.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-studio-tree-empty-768x380.webp 768w\" sizes=\"(max-width: 1529px) 100vw, 1529px\" loading=\"lazy\" \/><\/figure>\n<p>If you are new to how these records are stored, our primer on <a href=\"https:\/\/webkul.com\/blog\/data-objects-in-pimcore\/\">data objects in Pimcore<\/a> explains the DB side well.<\/p>\n<h2>Why imported data specifically goes invisible<\/h2>\n<p>Normal saves in the UI enqueue an index update reliably. Imports are different, and that difference is why &#8220;pimcore imported objects not visible in studio&#8221; is such a common search.<\/p>\n<p>Most imports run inside a Messenger worker. The save listener <code>DataObjectIndexUpdateSubscriber<\/code> fires within that worker thread, not in the main request context.<\/p>\n<p>Inside that worker, indexing is not enqueued consistently.<\/p>\n<p>The result: a &#8220;successful&#8221; import leaves rows in the DB that never reach OpenSearch. Parent folders can go missing too, because tree nodes are index-driven.<\/p>\n<p>This affects the <a href=\"https:\/\/webkul.com\/blog\/pimcore-custom-xlsx-import\/\">custom XLSX import<\/a>, the API path, and connectors alike. Any writer that creates objects inside a worker can hit it.<\/p>\n<figure><img decoding=\"async\" class=\"alignnone size-full wp-image-551722\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-import-success-invisible.webp\" alt=\"pimcore-reindex-import-success-invisible\" width=\"1529\" height=\"757\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-import-success-invisible.webp 1529w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-import-success-invisible-300x149.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-import-success-invisible-1200x594.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-import-success-invisible-250x124.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-import-success-invisible-768x380.webp 768w\" sizes=\"(max-width: 1529px) 100vw, 1529px\" loading=\"lazy\" \/><\/figure>\n<p>A well-built connector closes this gap with a reindex-after-import step. But when it does not, you fix it by hand with a Pimcore reindex.<\/p>\n<h2>The Pimcore Reindex Fix: Reindex and Drain the Consumer<\/h2>\n<p>The fix has two parts. First you re-enqueue the DB objects into the index queue. Then you drain the consumer so those updates reach OpenSearch.<\/p>\n<p>The <code>-c<\/code> flag takes a class id, not a class name. The Studio class list shows each id next to its name, or you can query it directly:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">php bin\/console doctrine:query:sql &quot;SELECT id, name FROM classes&quot;<\/pre>\n<p>Reindex a single class by its class id. For example, class id <code>1<\/code> for a &#8220;Car&#8221; class:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">php bin\/console generic-data-index:update:index -c 1<\/pre>\n<p>To reindex every DataObject non-destructively, drop the flag:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">php bin\/console generic-data-index:update:index<\/pre>\n<p>Now drain the consumer so the queued updates actually land in the index:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">php bin\/console messenger:consume pimcore_generic_data_index_queue --limit=500 --time-limit=40<\/pre>\n<figure><img decoding=\"async\" class=\"alignnone size-full wp-image-551723\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-cli-reindex.webp\" alt=\"pimcore-reindex-cli-reindex\" width=\"1529\" height=\"757\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-cli-reindex.webp 1529w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-cli-reindex-300x149.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-cli-reindex-1200x594.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-cli-reindex-250x124.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-cli-reindex-768x380.webp 768w\" sizes=\"(max-width: 1529px) 100vw, 1529px\" loading=\"lazy\" \/><\/figure>\n<p>The reindex command only enqueues. Without a running consumer on the <code>pimcore_generic_data_index_queue<\/code> transport, the messages sit undrained and Studio stays stale.<\/p>\n<p>The <code>--limit=500<\/code> caps one run at 500 messages. On a large import, re-run the consumer until the queue empties, or raise <code>--time-limit<\/code> and loop. Confirm it drained:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">php bin\/console doctrine:query:sql &quot;SELECT COUNT(*) FROM generic_data_index_queue&quot;<\/pre>\n<p>That count should reach <code>0<\/code>. After both commands finish, refresh Studio. The tree, grid, and search should show your imported objects.<\/p>\n<figure><img decoding=\"async\" class=\"alignnone size-full wp-image-551725\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-studio-tree-visible.webp\" alt=\"pimcore-reindex-studio-tree-visible\" width=\"1529\" height=\"757\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-studio-tree-visible.webp 1529w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-studio-tree-visible-300x149.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-studio-tree-visible-1200x594.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-studio-tree-visible-250x124.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-studio-tree-visible-768x380.webp 768w\" sizes=\"(max-width: 1529px) 100vw, 1529px\" loading=\"lazy\" \/><\/figure>\n<h2>How a Pimcore Reindex Flows: Enqueue vs Dispatch vs Consume<\/h2>\n<p>The pipeline has three distinct stages, and knowing them helps you debug why a Pimcore reindex sometimes &#8220;does nothing&#8221;.<\/p>\n<p>First, <strong>enqueue<\/strong>. The reindex command writes rows into the DB table <code>generic_data_index_queue<\/code>. Think of it as the to-do list.<\/p>\n<p>Second, <strong>dispatch<\/strong>. Those rows become Messenger messages in <code>messenger_messages<\/code> on the <code>pimcore_generic_data_index_queue<\/code> transport. Now they are active jobs.<\/p>\n<p>Third, <strong>consume<\/strong>. The Messenger consumer pulls those messages and calls <code>IndexUpdateQueueHandler<\/code>, which bulk-indexes elements into OpenSearch.<\/p>\n<p>Skip the consume step and nothing reaches OpenSearch. That single missing worker is the most common reason a Pimcore reindex appears to fail.<\/p>\n<h2>Verify it worked: index _count vs DB count<\/h2>\n<p>Do not trust a refresh alone. Compare the index document count against the database row count. Any mismatch means drift remains.<\/p>\n<p>First, pull your OpenSearch credentials from the project <code>.env.local<\/code>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">CRED=&quot;$(grep -oE &#039;opensearch:\/\/[^@]+&#039; .env.local | sed &#039;s#opensearch:\/\/##&#039;)&quot;<\/pre>\n<p>Now get the index document count for one class. The index name pattern is <code>pimcore_data-object_&lt;classlower&gt;<\/code>, so &#8220;Car&#8221; maps to <code>pimcore_data-object_car<\/code>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">curl -sk -u &quot;$CRED&quot; &quot;https:\/\/localhost:9200\/pimcore_data-object_car\/_count&quot;<\/pre>\n<p>Then read the matching DB row count:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">php bin\/console doctrine:query:sql &quot;SELECT COUNT(*) FROM objects WHERE className=&#039;Car&#039; AND type=&#039;object&#039;&quot;<\/pre>\n<figure><img decoding=\"async\" class=\"alignnone size-full wp-image-551727\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-opensearch-count.webp\" alt=\"pimcore-reindex-opensearch-count\" width=\"1529\" height=\"757\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-opensearch-count.webp 1529w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-opensearch-count-300x149.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-opensearch-count-1200x594.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-opensearch-count-250x124.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-opensearch-count-768x380.webp 768w\" sizes=\"(max-width: 1529px) 100vw, 1529px\" loading=\"lazy\" \/><\/figure>\n<p>When the two numbers match, the Pimcore reindex worked. When they differ, keep reading. The direction of the mismatch tells you what to do next.<\/p>\n<h2>Diagnosing drift and orphan docs<\/h2>\n<p>Drift comes in two flavors, and each needs a different fix. Read the counts before you act.<\/p>\n<p><strong>DB count greater than index count<\/strong> means missing documents. Objects exist but were never indexed. Run the targeted reindex:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">php bin\/console generic-data-index:update:index -c &lt;classId&gt;<\/pre>\n<p><strong>Index count greater than DB count<\/strong> means orphan documents. Someone deleted the object from the DB, but its index doc lingered. The reindex command only <em>adds<\/em> DB objects, so it never removes orphans.<\/p>\n<p>A ghost tree node that throws &#8220;Element not found&#8221; on click is the classic orphan. This is the &#8220;pimcore element not found studio tree&#8221; symptom.<\/p>\n<p>For orphans, remove the stale docs surgically. First find the orphan ids by diffing the index against the DB. Read the id from <code>_source<\/code>, since a default <code>_search<\/code> returns <code>_source<\/code> and not a <code>fields<\/code> block:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">curl -sk -u &quot;$CRED&quot; &quot;https:\/\/localhost:9200\/pimcore_data-object_car\/_search?size=10000&amp;_source=system_fields.id&quot; | jq -r &#039;.hits.hits[]._source.system_fields.id&#039; | sort &gt; index_ids.txt\nphp bin\/console doctrine:query:sql &quot;SELECT id FROM objects WHERE className=&#039;Car&#039;&quot; | grep -oE &#039;[0-9]+&#039; | sort &gt; db_ids.txt\ncomm -23 index_ids.txt db_ids.txt &gt; orphan_ids.txt<\/pre>\n<p>Then delete only those docs by exact id match:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">curl -sk -u &quot;$CRED&quot; -X POST &quot;https:\/\/localhost:9200\/pimcore_data-object_car\/_delete_by_query?refresh=true&amp;conflicts=proceed&quot; \\\n  -H &quot;Content-Type: application\/json&quot; \\\n  -d &#039;{&quot;query&quot;:{&quot;terms&quot;:{&quot;system_fields.id&quot;:[&lt;orphan ids from orphan_ids.txt&gt;]}}}&#039;<\/pre>\n<p>One trap: <code>pimcore_element-search<\/code> is a composite alias over every per-class index plus assets. Objects and assets have separate id sequences, so match <code>_index<\/code> and <code>key<\/code>, not id alone.<\/p>\n<h2>Pimcore Reindex Flags: The update:index Options You Should Know<\/h2>\n<p>The reindex command takes a few flags. Three are safe for routine use; one is a search blackout. Pick deliberately.<\/p>\n<p>Plain <code>generic-data-index:update:index<\/code> re-enqueues all DataObjects, non-destructively. Use it for routine healing or after a deploy.<\/p>\n<p>Add <code>-a<\/code> to also re-enqueue assets:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">php bin\/console generic-data-index:update:index -a<\/pre>\n<p>Add <code>-c &lt;classId&gt;<\/code> to re-enqueue every object of one class. Note that <code>-c<\/code> takes the class id, not the class name. This is the most common single-class fix and the one you will reach for most.<\/p>\n<p>The <code>-r<\/code> flag is different. It deletes and recreates the indices from scratch, then reindexes:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">php bin\/console generic-data-index:update:index -r<\/pre>\n<figure><img decoding=\"async\" class=\"alignnone size-full wp-image-551729\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-update-index-flags.webp\" alt=\"pimcore-reindex-update-index-flags\" width=\"1529\" height=\"757\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-update-index-flags.webp 1529w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-update-index-flags-300x149.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-update-index-flags-1200x594.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-update-index-flags-250x124.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-update-index-flags-768x380.webp 768w\" sizes=\"(max-width: 1529px) 100vw, 1529px\" loading=\"lazy\" \/><\/figure>\n<p><strong>Use <code>-r<\/code> only deliberately.<\/strong> Studio&#8217;s tree and search stay empty until the full reindex completes, so it is a live search blackout. Recreating mappings can also re-expose class-id-collision bugs.<\/p>\n<p>Reach for <code>-r<\/code> only when you changed an indexed field&#8217;s mapping or the index is corrupted, and do it in a quiet window. For routine post-deploy work, plain <code>update:index<\/code> plus <code>update:index -a<\/code> is enough.<\/p>\n<p>One legitimate routine <code>-r<\/code> exists: a connector installer may run it as the final install step to seed mappings for brand-new classes.<\/p>\n<p>There is no data to black out on a fresh install. Do not copy that line into a populated production deploy.<\/p>\n<h2>The bundle must be Installed, not just enabled<\/h2>\n<p>Here is the trap that makes drift &#8220;keep coming back&#8221;. Enabling <code>PimcoreGenericDataIndexBundle<\/code> in <code>config\/bundles.php<\/code> is not enough. The bundle must be <strong>Installed<\/strong>.<\/p>\n<p>Check its state:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">php bin\/console pimcore:bundle:list | grep GenericDataIndex<\/pre>\n<p>You want <code>Installed: yes<\/code>. If it is enabled but not installed, the save and delete subscribers early-return on <code>if (!$this-&gt;installer-&gt;isInstalled()) return;<\/code>.<\/p>\n<p>That early return means nothing auto-indexes on save, so imports stay invisible and fields save NULL. Nothing auto-de-indexes on delete either, so live deletions leave orphan ghost docs.<\/p>\n<p>Manual <code>update:index<\/code> works regardless of install state. That is exactly why a Pimcore reindex temporarily fixes things, then drift returns until you install the bundle properly.<\/p>\n<figure><img decoding=\"async\" class=\"alignnone size-full wp-image-551731\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-bundle-installed-check.webp\" alt=\"pimcore-reindex-bundle-installed-check\" width=\"1529\" height=\"757\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-bundle-installed-check.webp 1529w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-bundle-installed-check-300x149.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-bundle-installed-check-1200x594.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-bundle-installed-check-250x124.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-bundle-installed-check-768x380.webp 768w\" sizes=\"(max-width: 1529px) 100vw, 1529px\" loading=\"lazy\" \/><\/figure>\n<p>There is a long-lived worker trap here too. The consumer caches <code>isInstalled()<\/code> for its whole lifetime. After installing the bundle, restart the workers or they keep skipping indexing:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">php bin\/console messenger:stop-workers<\/pre>\n<h2>Prevent it: keep the consumer alive and reindex after import<\/h2>\n<p>The best fix is not needing the fix. Three habits keep the Pimcore OpenSearch index in sync on its own.<\/p>\n<p>First, <strong>keep the index consumer alive<\/strong>. Run it under Supervisor with <code>numprocs<\/code> of at least one, typically two to four workers on the <code>pimcore_generic_data_index_queue<\/code> transport.<\/p>\n<p>If the consumer dies, the queue table grows and nothing reaches the index.<\/p>\n<p>Second, <strong>honor the reindex-after-import contract<\/strong>. Every import job should reindex what it wrote before returning. Never ship an import that depends on an operator running the reindex command afterward.<\/p>\n<p>This applies to every connector, including the <a href=\"https:\/\/webkul.com\/blog\/pimcore-magento-2-connector\/\">Magento 2 connector<\/a>, the <a href=\"https:\/\/webkul.com\/blog\/pimcore-shopify-connector\/\">Shopify connector<\/a>, the <a href=\"https:\/\/webkul.com\/blog\/pimcore-bigcommerce-connector\/\">BigCommerce connector<\/a>, and the <a href=\"https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/\">PrestaShop connector<\/a>.<\/p>\n<p>Each writes objects inside a worker and must reindex on completion.<\/p>\n<figure><img decoding=\"async\" class=\"alignnone size-full wp-image-551733\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-supervisor-consumer.webp\" alt=\"pimcore-reindex-supervisor-consumer\" width=\"1529\" height=\"757\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-supervisor-consumer.webp 1529w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-supervisor-consumer-300x149.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-supervisor-consumer-1200x594.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-supervisor-consumer-250x124.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-supervisor-consumer-768x380.webp 768w\" sizes=\"(max-width: 1529px) 100vw, 1529px\" loading=\"lazy\" \/><\/figure>\n<p>Third, <strong>do not <code>cache:clear<\/code> while a live index consumer runs<\/strong>. It deletes the compiled-container directory the worker references, and the worker silently stops draining.<\/p>\n<p>After any <code>cache:clear<\/code>, run <code>messenger:stop-workers<\/code> so managed daemons respawn fresh.<\/p>\n<p>On a shared OpenSearch cluster, set <code>PIMCORE_OPENSEARCH_INDEX_PREFIX<\/code> to isolate instances.<\/p>\n<p>Verify it took effect with <code>_cat\/indices<\/code>, since a misconfigured prefix silently drops everyone onto the same unprefixed indices.<\/p>\n<h2>Pimcore Reindex After an OpenSearch Outage<\/h2>\n<p>If everything broke at once, open, create, list, and search alike, then OpenSearch itself likely went down or ran out of memory. Recover in order.<\/p>\n<p>First, confirm the cluster is healthy. <code>yellow<\/code> or <code>green<\/code> is fine:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">curl -sk -u &quot;$CRED&quot; https:\/\/localhost:9200\/_cluster\/health<\/pre>\n<p>Next, restart the index consumer so managed daemons respawn:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">php bin\/console messenger:stop-workers<\/pre>\n<p>Then retry any failed batches from the dedicated failed transport:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">php bin\/console messenger:failed:retry --transport=pimcore_generic_data_index_failed --force<\/pre>\n<p>Finally, run a non-destructive reindex, plain then <code>-a<\/code>, and never <code>-r<\/code> here. Monitor <code>SELECT COUNT(*) FROM generic_data_index_queue<\/code> trending to zero while each per-class <code>_count<\/code> climbs toward its DB count.<\/p>\n<h2>Conclusion<\/h2>\n<p>Missing objects after import are almost never a data-loss bug. Studio reads the OpenSearch generic data index, and your import simply never fed it.<\/p>\n<p>A Pimcore reindex plus a queue drain restores the tree, grid, and search.<\/p>\n<p>Keep the consumer alive, install the bundle properly, and make every import reindex what it wrote. Do that and you will rarely run the fix by hand again.<\/p>\n<p>Building a data pipeline into Pimcore? Start with the fundamentals in our guide on <a href=\"https:\/\/webkul.com\/blog\/how-to-create-class-data-object-in-pimcore\/\">how to create a class and data object in Pimcore<\/a>.<\/p>\n<p>Then talk to <a href=\"https:\/\/webkul.com\/\">Webkul<\/a> about a connector that reindexes for you out of the box.<\/p>\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>You ran an import. The rows landed in the database. But your Pimcore imported objects are not visible in Studio, and a Pimcore reindex is what you actually need. The tree is empty, the grid is empty, and search returns nothing. This guide targets Pimcore 12 with Studio and the PimcoreGenericDataIndexBundle. If you run the <a href=\"https:\/\/webkul.com\/blog\/pimcore-reindex\/\">[&#8230;]<\/a><\/p>\n","protected":false},"author":399,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8189,1],"tags":[8201,8486,8202,7703],"class_list":["post-551715","post","type-post","status-publish","format-standard","hentry","category-pimcore","category-uncategorized","tag-pimcore","tag-pimcore-connector","tag-pimcore-pim","tag-product-information-management"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Pimcore Reindex: Fix Objects Missing After Import<\/title>\n<meta name=\"description\" content=\"Pimcore reindex fix: imported objects sit in the DB but vanish from Studio&#039;s tree, grid, and search. Rebuild the OpenSearch index and drain the queue\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/webkul.com\/blog\/pimcore-reindex\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Pimcore Reindex: Fix Objects Missing After Import\" \/>\n<meta property=\"og:description\" content=\"Pimcore reindex fix: imported objects sit in the DB but vanish from Studio&#039;s tree, grid, and search. Rebuild the OpenSearch index and drain the queue\" \/>\n<meta property=\"og:url\" content=\"https:\/\/webkul.com\/blog\/pimcore-reindex\/\" \/>\n<meta property=\"og:site_name\" content=\"Webkul Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/webkul\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-31T05:53:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-31T05:56:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-studio-tree-empty.webp\" \/>\n<meta name=\"author\" content=\"Nitesh Arora\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@webkul\" \/>\n<meta name=\"twitter:site\" content=\"@webkul\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nitesh Arora\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-reindex\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-reindex\/\"},\"author\":{\"name\":\"Nitesh Arora\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/person\/3b0c0c713bd646e411ad5b4563364bb0\"},\"headline\":\"Pimcore Reindex: Fix Objects Missing After Import\",\"datePublished\":\"2026-07-31T05:53:44+00:00\",\"dateModified\":\"2026-07-31T05:56:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-reindex\/\"},\"wordCount\":1570,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/webkul.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-reindex\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-studio-tree-empty.webp\",\"keywords\":[\"Pimcore\",\"Pimcore connector\",\"Pimcore PIM\",\"Product Information Management\"],\"articleSection\":[\"PimCore\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/webkul.com\/blog\/pimcore-reindex\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-reindex\/\",\"url\":\"https:\/\/webkul.com\/blog\/pimcore-reindex\/\",\"name\":\"Pimcore Reindex: Fix Objects Missing After Import\",\"isPartOf\":{\"@id\":\"https:\/\/webkul.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-reindex\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-reindex\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-studio-tree-empty.webp\",\"datePublished\":\"2026-07-31T05:53:44+00:00\",\"dateModified\":\"2026-07-31T05:56:14+00:00\",\"description\":\"Pimcore reindex fix: imported objects sit in the DB but vanish from Studio's tree, grid, and search. Rebuild the OpenSearch index and drain the queue\",\"breadcrumb\":{\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-reindex\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/webkul.com\/blog\/pimcore-reindex\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-reindex\/#primaryimage\",\"url\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-studio-tree-empty.webp\",\"contentUrl\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-studio-tree-empty.webp\",\"width\":1529,\"height\":757,\"caption\":\"pimcore-reindex-studio-tree-empty\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-reindex\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/webkul.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Pimcore Reindex: Fix Objects Missing After Import\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/webkul.com\/blog\/#website\",\"url\":\"https:\/\/webkul.com\/blog\/\",\"name\":\"Webkul Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/webkul.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/webkul.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/webkul.com\/blog\/#organization\",\"name\":\"WebKul Software Private Limited\",\"url\":\"https:\/\/webkul.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png\",\"contentUrl\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png\",\"width\":380,\"height\":380,\"caption\":\"WebKul Software Private Limited\"},\"image\":{\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/webkul\/\",\"https:\/\/x.com\/webkul\",\"https:\/\/www.instagram.com\/webkul\/\",\"https:\/\/www.linkedin.com\/company\/webkul\",\"https:\/\/www.youtube.com\/user\/webkul\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/person\/3b0c0c713bd646e411ad5b4563364bb0\",\"name\":\"Nitesh Arora\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2628caeef979fc167146e3d99675895a39d9ca9c9105fef4b733893fd28a25f5?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/2628caeef979fc167146e3d99675895a39d9ca9c9105fef4b733893fd28a25f5?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g\",\"caption\":\"Nitesh Arora\"},\"url\":\"https:\/\/webkul.com\/blog\/author\/nitesh-arora945\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Pimcore Reindex: Fix Objects Missing After Import","description":"Pimcore reindex fix: imported objects sit in the DB but vanish from Studio's tree, grid, and search. Rebuild the OpenSearch index and drain the queue","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/webkul.com\/blog\/pimcore-reindex\/","og_locale":"en_US","og_type":"article","og_title":"Pimcore Reindex: Fix Objects Missing After Import","og_description":"Pimcore reindex fix: imported objects sit in the DB but vanish from Studio's tree, grid, and search. Rebuild the OpenSearch index and drain the queue","og_url":"https:\/\/webkul.com\/blog\/pimcore-reindex\/","og_site_name":"Webkul Blog","article_publisher":"https:\/\/www.facebook.com\/webkul\/","article_published_time":"2026-07-31T05:53:44+00:00","article_modified_time":"2026-07-31T05:56:14+00:00","og_image":[{"url":"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-studio-tree-empty.webp","type":"","width":"","height":""}],"author":"Nitesh Arora","twitter_card":"summary_large_image","twitter_creator":"@webkul","twitter_site":"@webkul","twitter_misc":{"Written by":"Nitesh Arora","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/webkul.com\/blog\/pimcore-reindex\/#article","isPartOf":{"@id":"https:\/\/webkul.com\/blog\/pimcore-reindex\/"},"author":{"name":"Nitesh Arora","@id":"https:\/\/webkul.com\/blog\/#\/schema\/person\/3b0c0c713bd646e411ad5b4563364bb0"},"headline":"Pimcore Reindex: Fix Objects Missing After Import","datePublished":"2026-07-31T05:53:44+00:00","dateModified":"2026-07-31T05:56:14+00:00","mainEntityOfPage":{"@id":"https:\/\/webkul.com\/blog\/pimcore-reindex\/"},"wordCount":1570,"commentCount":0,"publisher":{"@id":"https:\/\/webkul.com\/blog\/#organization"},"image":{"@id":"https:\/\/webkul.com\/blog\/pimcore-reindex\/#primaryimage"},"thumbnailUrl":"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-studio-tree-empty.webp","keywords":["Pimcore","Pimcore connector","Pimcore PIM","Product Information Management"],"articleSection":["PimCore"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/webkul.com\/blog\/pimcore-reindex\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/webkul.com\/blog\/pimcore-reindex\/","url":"https:\/\/webkul.com\/blog\/pimcore-reindex\/","name":"Pimcore Reindex: Fix Objects Missing After Import","isPartOf":{"@id":"https:\/\/webkul.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/webkul.com\/blog\/pimcore-reindex\/#primaryimage"},"image":{"@id":"https:\/\/webkul.com\/blog\/pimcore-reindex\/#primaryimage"},"thumbnailUrl":"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-studio-tree-empty.webp","datePublished":"2026-07-31T05:53:44+00:00","dateModified":"2026-07-31T05:56:14+00:00","description":"Pimcore reindex fix: imported objects sit in the DB but vanish from Studio's tree, grid, and search. Rebuild the OpenSearch index and drain the queue","breadcrumb":{"@id":"https:\/\/webkul.com\/blog\/pimcore-reindex\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/webkul.com\/blog\/pimcore-reindex\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webkul.com\/blog\/pimcore-reindex\/#primaryimage","url":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-studio-tree-empty.webp","contentUrl":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/07\/pimcore-reindex-studio-tree-empty.webp","width":1529,"height":757,"caption":"pimcore-reindex-studio-tree-empty"},{"@type":"BreadcrumbList","@id":"https:\/\/webkul.com\/blog\/pimcore-reindex\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/webkul.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Pimcore Reindex: Fix Objects Missing After Import"}]},{"@type":"WebSite","@id":"https:\/\/webkul.com\/blog\/#website","url":"https:\/\/webkul.com\/blog\/","name":"Webkul Blog","description":"","publisher":{"@id":"https:\/\/webkul.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/webkul.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/webkul.com\/blog\/#organization","name":"WebKul Software Private Limited","url":"https:\/\/webkul.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png","contentUrl":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png","width":380,"height":380,"caption":"WebKul Software Private Limited"},"image":{"@id":"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/webkul\/","https:\/\/x.com\/webkul","https:\/\/www.instagram.com\/webkul\/","https:\/\/www.linkedin.com\/company\/webkul","https:\/\/www.youtube.com\/user\/webkul\/"]},{"@type":"Person","@id":"https:\/\/webkul.com\/blog\/#\/schema\/person\/3b0c0c713bd646e411ad5b4563364bb0","name":"Nitesh Arora","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webkul.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/2628caeef979fc167146e3d99675895a39d9ca9c9105fef4b733893fd28a25f5?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2628caeef979fc167146e3d99675895a39d9ca9c9105fef4b733893fd28a25f5?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g","caption":"Nitesh Arora"},"url":"https:\/\/webkul.com\/blog\/author\/nitesh-arora945\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts\/551715","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/users\/399"}],"replies":[{"embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/comments?post=551715"}],"version-history":[{"count":9,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts\/551715\/revisions"}],"predecessor-version":[{"id":551735,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts\/551715\/revisions\/551735"}],"wp:attachment":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/media?parent=551715"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/categories?post=551715"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/tags?post=551715"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}