pantheon-systems / solr-power
An open source plugin to connect to Pantheon's Apache Solr search infrastructure, or your own!
Installs: 115
Dependents: 0
Suggesters: 0
Security: 0
Stars: 126
Watchers: 41
Forks: 62
Open Issues: 49
Type:wordpress-plugin
Requires
Requires (Dev)
- dealerdirect/phpcodesniffer-composer-installer: ^1.0.0
- pantheon-systems/pantheon-wordpress-upstream-tests: dev-master
- phpcompatibility/php-compatibility: ^9.3
- phpunit/phpunit: ^6 || ^7
- wp-coding-standards/wpcs: ^2.1
- yoast/phpunit-polyfills: ^2.0
- dev-main
- 8.x-dev
- 2.6.0
- 2.5.3
- 2.5.2
- 2.5.1
- 2.5.0
- 2.4.5
- 2.4.4
- 2.4.3
- 2.4.2
- 2.4.1
- 2.4.0
- v2.3.3
- v2.3.2
- v2.3.1
- v2.2.6
- v2.2.5
- v2.2.4
- v2.2.3
- v2.2.2
- v2.2.1
- v2.2.0
- v2.1.4
- v2.1.3
- v2.1.2
- v2.1.1
- v2.1.0
- 2.0.0
- 1.5.0
- 1.4.1
- 1.4.0
- 1.3.0
- 1.2.0
- 1.1.0
- 1.0.0
- 0.6.0
- 0.5.0
- 0.4
- 0.3
- dev-develop
- dev-fix-release
- dev-release_2.6.0
- dev-release-actions
- dev-BUGS-8883
- dev-bool-notices
- dev-is-query-docs
- dev-fix-fixture-check
- dev-prerelease-fixup
- dev-Add-is_solr_query-filter
- dev-dependabot/composer/develop/yoast/phpunit-polyfills-3.0.0
- dev-add-catalog-workflow-20241010
- dev-release_2.4.5
- dev-develop-alt
- dev-TEST-FORK-PR-588
- dev-bugs-5402
- dev-cmsp-73
- dev-cmsp-73-v2
- dev-master
- dev-rest-ajax
- dev-issue/37
This package is auto-updated.
Last update: 2024-12-06 23:57:47 UTC
README
Contributors: getpantheon, Outlandish Josh, 10up, collinsinternet, andrew.taylor, danielbachhuber, mattleff, mikengarrett, jazzsequence, jspellman, pwtyler
Tags: search
Requires at least: 4.6
Requires PHP: 7.1
Tested up to: 6.7.1
Stable tag: 2.6.0
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Improve your user experience with the Apache Solr search engine for your WordPress website.
Description
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
Installation
The Solr Power plugin can be installed just like you'd install any other WordPress plugin.
Because Solr Power is intended to be a bridge between WordPress and the Apache Solr search engine, you'll need access to a functioning Solr 3.6 instance for the plugin to work as expected. This plugin does not support other versions of Solr. The plugin also requires PHP 7.1 or higher.
If you're using the Solr Power plugin on Pantheon, setting up Apache Solr is as easy as enabling the Apache Solr add-on in your Pantheon dashboard. Once you've done so:
- Configure which post types, taxonomies and custom fields to index by going to the Indexing tab of the Solr Power settings page.
- Index your existing content by going to the plugin options screen and selecting the applicable Actions:
-
- Index Searchable Post Types
-
- Search on!
- See the examples/templates directories for more rich implementation guidelines.
If you're using the Solr Power plugin elsewhere, you'll need to install and configure Apache Solr. On a Linux environment, this involves four steps:
- Install the Java Runtime Environment.
- Run
./bin/install-solr.sh
to install and run Apache Solr on port 8983. - Configuring Solr Power to use this particular Solr instance by setting the
PANTHEON_INDEX_HOST
andPANTHEON_INDEX_PORT
environment variables. - Copying
schema.xml
to the Solr configuration directory (a path similar tosolr/conf/schema.xml
).
Alternatively, there are a couple of community-maintained Docker containers you may be able to use: kalabox/pantheon-solr, kshaner/solr.
In a local development environment, you can point Solr Power to a custom Solr instance by creating a MU plugin with:
<?php
/**
* Define Solr host IP, port, scheme and path
* Update these as necessary if your configuration differs
*/
putenv( 'PANTHEON_INDEX_HOST=192.168.50.4' );
putenv( 'PANTHEON_INDEX_PORT=8983' );
add_filter( 'solr_scheme', function(){ return 'http'; });
define( 'SOLR_PATH', '/solr/wordpress/' );
** Note for Lando users **
If you are using lando for development, the MU plugin is not needed. Lando auto configures everything for your local environment to connect to the docker index it maintains and if you overrite the ENV variables it will mess with that configuration.
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! See CONTRIBUTING.md for information on contributing.
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
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.
WP_Query Integration
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
:
<copyField source="post_author" dest="text"/>
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( 'c\Z', $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' );
is_solr_query
Filter
The is_solr_query
filter controls whether Solr should be used for a specific query.
Parameters:
- $enabled (bool): Indicates whether Solr should be used for the query. Defaults to true if the query is a search or if solr_integrate is set in the query.
- $query (WP_Query): The current WordPress query object.
Return:
- bool: true to enable Solr for the query, false to disable it.
add_filter( 'is_solr_query', function( $enabled, $query ) { if ( $query->is_category( 'news' ) ) { return false; } return $enabled; }, 10, 2 );
Custom Schema file path
By default, custom schema is sourced from wp-content/uploads/solr-for-wordpress-on-pantheon/schema.xml
. This can be overridden with an absolute path using the the solr_power_customer_schema_file_path
filter.
Parameters:
- $custom_schema_file_path (string): Default path to a custom schema file
Return:
- string: Absolute path to a custom schema.xml file.
add_filter('solr_power_customer_schema_file_path', function($custom_schema_file_path) { return '/absolute/path/to/schema.xml'; });
Common issues
- Failing to post the schema.xml will result in an error during indexing, "Missing
post_date_iso
field." - If you have the field and type in the schema, but don't add the
solr_build_document
filter, you will get a similar error. - If the
post_date_iso
field 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.
Explicit Commit vs Autocommit
Once solr has sent the data to the solr server, solr must COMMIT the data to the index and adjust the index and relevancy ratings accordingly before that data can appear in search results.
By default, Solr Search for WordPress has auto-commit disabled. The index is committed when the uncommitted item is two minutes old, or the cron runs. By default, the cron runs on the Pantheon platform every hour.
When autocommit is enabled, Solr Search for WordPress commits data when it sends every post. When running on Pantheon, we recommend leaving autocommit disabled to aid overall site performance.
To enable autocommit, add the following to wp-config.php
or an mu-plugin.
define( 'SOLRPOWER_DISABLE_AUTOCOMMIT', false );
To force-commit data outside of a normal cron run, from the command line, you can run the command below or simply force a cron-run.
wp solr commit
Security Policy
Reporting Security Bugs
Please report security bugs found in the Solr Power plugin's source code through the Patchstack Vulnerability Disclosure Program. The Patchstack team will assist you with verification, CVE assignment, and notify the developers of this plugin.