Fragmented Thought

Force Drupal search reindex for specific nodes

By

Published:

Lance Gliser

Heads up! This content is more than six months old. Take some time to verify everything still works as expected.

I had the occasion to need to change the search indexing logic for a specific content type. The site has thousands of nodes, many not of the type that had its search index logic altered. Calling for a full search reindex would be a very time-consuming process, when I only need to do a fourth of them. The answer turns out to be extremely simple.

With a bit of fancy sql, you can simply target any set of existing nodes for update. All you have to do is set update a single table: search_dataset. Normally whenever a node is saved, or a comment is added, code is fired to 'touch' that table, setting the reindex column equal to a unix timestamp for the time of the request. Then search churns over anything with a timestamp greater than 0 reindexing.

So for our need? Easy sql:

UPDATE search_dataset SET reindex = UNIX_TIMESTAMP(NOW()) WHERE `type` = 'node' AND sid IN ( SELECT nid FROM node node WHERE -- conditions )

Remember your drush search-index command!