Solr Search for WordPress

Search is critical for your site, but the default search for WordPress leaves a lot to be desired. Improve your user experience with the Apache Solr search engine for your WordPress website.
- Fast results, with better accuracy.
- Enables faceting on fields such as tags, categories, author, and page type.
- Indexing and faceting on custom fields.
- Drop-in support for WP_Query with the “solr-integrate” parameter set to true.
- Completely replaces default WordPress search, just install and configure.
- Completely integrated into default WordPress theme and search widget.
- Very developer-friendly: uses the modern Solarium library
Development
This plugin is under active development on GitHub:
https://github.com/pantheon-systems/solr-power
Please feel free to file issues there. Pull requests are also welcome!
For further documentation, such as available filters and working with the SolrPower_Api class directly, please see the project wiki:
https://github.com/pantheon-systems/solr-power/wiki
You may notice there are two sets of tests running, on two different services:
- Travis CI runs the PHPUnit test suite against a Solr instance.
- Circle CI runs the Behat test suite against a Pantheon site, to ensure the plugin’s compatibility with the Pantheon platform.
Both of these test suites can be run locally, with a varying amount of setup.
PHPUnit requires the WordPress PHPUnit test suite, and access to a database with name wordpress_test. If you haven’t already configured the test suite locally, you can run bash bin/install-wp-tests.sh wordpress_test root '' localhost. You’ll also need access to a running Solr instance, in order to run the unit tests against Solr.
Behat requires a Pantheon site with Solr enabled. Once you’ve created the site, you’ll need install Terminus, and set the TERMINUS_TOKEN, TERMINUS_SITE, and TERMINUS_ENV environment variables. Then, you can run ./bin/behat-prepare.sh to prepare the site for the test suite.
Note that dependencies are installed via Composer and the vendor directory is not committed to the repository. You will need to run composer install locally for the plugin to function. You can read more about Composer here
WP-CLI Support
This plugin has WP-CLI support.
All Solr Power related commands are grouped into the wp solr command, see an example:
$ wp solr
usage: wp solr check-server-settings
or: wp solr delete [<id>...] [--all]
or: wp solr index [--batch=<batch>] [--batch_size=<size>] [--post_type=<post-type>]
or: wp solr info [--field=<field>] [--format=<format>]
or: wp solr optimize-index
or: wp solr repost-schema
or: wp solr stats [--field=<field>] [--format=<format>]
See 'wp help solr <command>' for more information on a specific command.
You can see more details about the commands using wp help solr:
**NAME**
wp solr
**DESCRIPTION**
Perform a variety of actions against your Solr instance.
**SYNOPSIS**
wp solr <command>
**SUBCOMMANDS**
check-server-settings Check server settings.
delete Remove one or more posts from the index.
index Index all posts for a site.
info Report information about Solr Power configuration.
optimize-index Optimize the Solr index.
repost-schema Repost schema.xml to Solr.
stats Report stats about indexed content.<h3>WP_Query Integration</h3>
Use Solr in a custom WP_Query instead of querying a database. Add 'solr_integrate' => true to the query arguments.
NOTE: Currently, only basic queries, tax_query, meta_query and date_query are supported. See examples/example.custom_WP_Query.php for an example.
A meta_query can use the following compare operators:
'=''!=''>''>=''<''<=''LIKE''NOT LIKE''IN''NOT IN''BETWEEN''NOT BETWEEN''EXISTS''NOT EXISTS'
('REGEXP', 'NOT REGEXP', and 'RLIKE' are not supported.)
Configuration Tips
Searching by author name
To support searching by author name (e.g. where “Pantheon” would return posts authored by the “Pantheon” user), add the following to your custom schema.xml:
`
`
Boosting relevancy score by publish date
The following guidance can be used to extend the Solr index and modify boosts beyond just this example.
To support math functions on dates, you must add a custom schema.xml to Solr and reindex with the new schema.
Add the following to schema.xml:
<!-- Add to <types> -->
<!-- See: https://lucene.apache.org/solr/6_2_0/solr-core/org/apache/solr/schema/TrieDateField.html -->
<fieldType name="tdate" class="solr.TrieDateField" omitNorms="true" precisionStep="6" positionIncrementGap="0"/>
<!-- Add to <fields> -->
<field name="post_date_iso" type="tdate" indexed="true" stored="true" required="true" />
Add the following to your functions.php file.
<?php
/**
* Hooks into the document build process to add post date field in proper format.
*/
function my_solr_build_document( $doc, $post_info ) {
$post_time = strtotime( $post_info->post_date );
// Matches format required for TrieDateField
$doc->setField( 'post_date_iso', gmdate( 'cZ', $post_time ) );
return $doc;
}
add_filter( 'solr_build_document', 'my_solr_build_document', 10, 2 );
/**
* Hooks into query processor, Dismax, to add publish date boost.
* See: https://www.metaltoad.com/blog/date-boosting-solr-drupal-search-results
*/
function my_solr_dismax_query( $dismax ) {
$dismax->setQueryParser( 'edismax' );
$dismax->setBoostQuery( 'recip(abs(ms(NOW/HOUR,post_date_iso),3.16e-11,1,1))' );
return $dismax;
}
add_filter( 'solr_dismax_query', 'my_solr_dismax_query' );
Common issues
- Failing to post the schema.xml will result in an error during indexing, “Missing
post_date_isofield.” - If you have the field and type in the schema, but don’t add the
solr_build_documentfilter, you will get a similar error. - If the
post_date_isofield is missing from the index, Solr will ignore this boost and return regular results. - Trying to use a regular date field for the boost query will result in an error in the request instead of results.
Download & install the zip archive
The plugin package installer can be downloaded from the WP2E project tab called “code”.
1 – Select the version to download if this option is available otherwise the “latest” version of the main plugin will be used.
2 – After downloading the zip archive install the plugin package installer in you local environment and activate the script from the plugin list.
3 – Under the section “Plugins” of the admin dashboard you should see a new “Dependencies & Licenses” link. Follow the instructions from this panel to finalize the installation of the missing dependencies.
- Give a name to your project
- Download the Installer Package
- Install & activate the plugin locally
- Install the suggested dependencies
Tips: Use the WP2E panel to add/suggest new dependencies to the local installation. Press F5 in the list of dependencies if the changes are not displayed right away.



