The Elasticsearch (ES) indexes are similar, in a way, to MySQL table indexes – they keep track of all the items they are asked to, and allow the ES engine to quickly resolve a query to the underlying data. But they are also different, because ES doesn’t have the full database; it’s only designed for quick retrieval and sorting/filtering of the items in the index.
If you have more than one index, for example, one index for terms and another (default) index for posts, each index requires separate steps for indexing, re-indexing, and versioning.
Content is normally indexed incrementally, as it is created and updated.
index command initiates indexing activity on a new or existing index starting from the newest content. This is helpful if you’ve just added an allow list entry for a post meta key that wasn’t previously being indexed, for example.
Because these are WP-CLI commands, you’ll need to pass them to the VIP-CLI, as demonstrated in the first example (where our app id is 103). We’ve omitted this prefix from the remaining commands for clarity.
$ vip @103 -- wp vip-search index Indexing posts... Processed 500/37674. Last Object ID: 37550 ... Processed 37500/37674. Last Object ID: 179 Processed 37674/37674. Last Object ID: 1 Number of posts indexed: 37674 Total time elapsed: 605.960 Success: Done!
The amount of time it takes for an index depends on the size of the database. To increase the amount of posts indexed per cycle, use the
Additional Command Options
index command accepts several additional options. To check which ones are available, use the
wp help command:
$ wp help vip-search index
Values not accepted.
--setup option completely drops and recreates the index.
This option is useful in situations where you modify the database outside of normal WordPress functionality (i.e. using bulk CLI commands to modify data using raw SQL and the proper hooks do not fire). Only running
wp vip-search index may not bring the database and Elasticsearch index back into sync — the only way to sync up is by creating a fresh index and then, indexing the database content into the ES index.
$ wp vip-search index --setup
--setup option will drop the current index, and create a fresh index. If the site is in production, this is not recommended – please use index versioning instead.
Values not accepted.
This command sequentially indexes all of the subsites in a network.
$ wp vip-search index --network-wide
Accepted values: index version number,
The index version to target the command to — it is used during versioning to build up a new index in parallel with the current active index. Typically used in conjunction with the
For example, if we have created a new index version
2 for post content and want to index it:
$ wp vip-search index --version=2 --indexables=post
Accepted values: single value Indexable or comma-separated list of Indexables
Default values: all registered Indexables:
This option is used to target specific Indexable(s).
$ wp vip-search index --indexables=term
Accepted values: single value document ID
To limit a subset of IDs when indexing.
A common use case would be to resume indexing after an interruption or timeout. For example, a previous index command was interrupted at post ID
100, so we would trigger a new index operation using
--upper-limit-object-id to begin at
$ wp vip-search index --upper-limit-object-id=100
When these options are used together, they scope down the indexing to a range of documents. For example, to index post IDs from
$ wp vip-search index --upper-limit-object-id=50 --lower-limit-object-id=10
The indexing process goes from highest to lowest ID. E.g. In a range, it starts at
--upper-limit-object-id and descends towards
Accepted values: numerical value of posts per page
500 (maximum of
This option determines the amount of posts to be indexed per cycle.
$ wp vip-search index --per-page=1000
Accepted values: single value object ID or comma-separated list of object IDs
This option targets indexing only the listed ID(s). For example, we only want to index
$ wp vip-search index --include=7,20
Accepted values: single post type or comma-separated list of post types
Defaults to all public post types. This option targets indexing only the specified post type(s).
$ wp vip-search index --post-type=page
Values not accepted.
This option displays a verbose error output during indexing. If a post fails to index, it will return with the full error message (compared to just the post ID and title).
$ wp vip-search index --show-bulk-errors
Values not accepted.
This option skips the Enterprise Search confirmation prompt, “You are about to run a destructive operation. Are you sure?”, for destructive operations. For example, using the option with
$ wp vip-search index --setup --skip-confirm Indexing with setup option needs to delete Elasticsearch index first, are you sure you want to delete your Elasticsearch index? [y/n] y
Compared to using the option without:
╰─$ wp vip-search index --setup ⚠️ You are about to run a destructive operation. Are you sure? [y/n] y Indexing with setup option needs to delete Elasticsearch index first, are you sure you want to delete your Elasticsearch index? [y/n] y
get-indexing-status command if you want to check on the progress of an
index command that is running.
$ wp vip-search get-indexing-status
For example, for a site where there is ongoing indexing, the output will return
"indexing" in JSON formatting (along with how the indexing was actioned, the number of items already indexed and the total number of items needing to be indexed):
Alternatively, when there is no indexing occurring, the output will be
In a scenario where the indexing has unexpectedly failed, you may still see
"indexing", but the total items will return
If there is indexing currently occurring that needs to be halted, the
stop-indexing command can be used:
$ wp vip-search stop-indexing
Error: An index is already occurring. Try again later.
If no indexing is currently occurring (i.e. the indexing command unexpectedly stops) but you are receiving an error message that it is, you may need to remove the index lock before re-trying to index:
$ wp vip-search delete-transient
If you are unsure on the status of indexing, use the
get-indexing-status command to check on it.