ElasticPress

Description

ElasticPress, a fast and flexible search and query engine for WordPress, enables WordPress to find or “query” relevant content extremely fast through a variety of highly customizable features. WordPress out-of-the-box struggles to analyze content relevancy and can be very slow. ElasticPress supercharges your WordPress website making for happier users and administrators.

Here is a list of the amazing ElasticPress features included in the plugin:

Search: Instantly find the content you’re looking for. The first time.

WooCommerce: “I want a cotton, woman’s t-shirt, for under $15 that’s in stock.” Faceted product browsing strains servers and increases load times. Your buyers can find the perfect product quickly, and buy it quickly.

Related Posts: ElasticPress understands data in real time, so it can instantly deliver engaging and precise related content with no impact on site performance.

Protected Content: Optionally index all of your content, including private and unpublished content, to speed up searches and queries in places like the administrative dashboard.

Documents: Indexes text inside of popular file types, and adds those files types to search results.

Please refer to Github for detailed usage instructions and documentation.

Installation

  1. First, you will need to properly install and configure Elasticsearch.
  2. Activate the plugin in WordPress.
  3. In the ElasticPress settings page, input your Elasticsearch host.
  4. Enjoy!

FAQ

Installation Instructions
  1. First, you will need to properly install and configure Elasticsearch.
  2. Activate the plugin in WordPress.
  3. In the ElasticPress settings page, input your Elasticsearch host.
  4. Enjoy!

Reviews

Perfect Search Engine for WordPress

Looks a good. But have a feature requests (if it’s possible):

1. Support ElasticSearch v. 5.3.0. See message bellow:

“Your Elasticsearch version 5.3.0 is above the maximum required Elasticsearch version 5.2. ElasticPress may or may not work properly.”

2. Add a block to obtain a cluster status/statistics.

Many thanks!

Works as Described

Did not have any issues with my hosting provider or the plugin. It installed and functioned the first time around.

A life saver

Guys I use your amazing plugin on my 100,000 products+ Woocommerce site and I must say it’s just a life saver for me given my relatively modest server resources. It boosted my product listings, pagination and search tremendously. Every month your plugin saves me a significant amount that otherwise I would have to pay for a much more powerful server. I’m not a big fan of reviews, even when I’m very satisfied with a product, but your case is different – I just want you to know how I appreciate your great work, seriously.

Awesome plugin for speeding up and making your WordPress searches more meaningfu

I will not be brief in review as there is o much I want to say about this beauty of a plugin!!!

Its been about 3 weeks that I have installed ElasticPress on my WordPress installation.
My setup is a Multi-site installation and is intended to have at-least 500+ sub-sites in it. On top of it the search feature is supposed o search within the entire network. With 500+ sites, the other “global search” plugins hat I tried were:
1. either unable to support searching the entire network
2. or just so long (5+ minutes) that page eventually timed out.

At that time I git a whiff of ELasticSearch and eventually ElasticPress and implemented on my test setup ( with 1k sites and 20 posts and 20 custom posts per sites- so 40k posts across the network) and the search just worked beautifully.
Though it required a bit of knowledge of WP-CLI (another super-awesome tool) to automate many steps (setting up 1000 sites) in general and execute ElasticPress commands in particular.

More than WP-CLI, it is requiring a bit of knowledge of ElasticSearch, that is in order here to harness the full benefit of this plugin.

Of course there are a few issues which need ironing out. But then, which software does not have it?

Since there is no GUI or admin panel to control/setup ElasticPress, you have to read the documentation very carefully.

Read the review of @iamwordimpressed for more details.

So, summarizing it: if you are ready to learn a bit of command-line, and ElasticSearch, and ready to read the dcoumentation, then there is nothing that can beat this plugin for search functionality and especially when you have a big multisite network and you need your visitors to be able to search ACROSS your ENTIRE netwrok.

P.S. I would have loved to mention my website url here, for interested folks to check it out its power, but it is not fully ready yet and secondly, I dont know if forum rules allow it. Most importantly I am not sure if authors of the plugin would like the idea or not.
If authors are fine, and it does not violate any forum rules, then I would definitely give my website details here.

Read all 10 reviews

Contributors & Developers

“ElasticPress” is open source software. The following people have contributed to this plugin.

Contributors

Changelog

2.3

Version 2.3 introduces the Documents feature which indexes text inside of popular file types, and adds those files types to search results. We’ve also officially added support for Elasticsearch 5.3.

Enhancements

  • Documents feature
  • Enable multiple feature status messages
  • Disable dashboard sync via constant: define( 'EP_DASHBOARD_SYNC', false );. Props rveitch.
  • Add filter for custom WooCommerce taxonomies. Props kallehauge.
  • Support WooCommerce product_type taxonomy. Props kallehauge.

Bug Fixes

  • Fix WP-CLI --no-bulk number of posts indexed message. Props ivankristianto.
  • Honor ep_integrate in WooCommerce queries. Props ivankristianto.
  • Properly check when ES results are empty. Props lukaspawlik
  • Incorrect found_posts set in query when ES is unavailable. Props lukaspawlik

2.2.1

Version 2.2.1 is a bug fix release. Here are a listed of issues that have been resolved:

  • Fix dashboard syncing delayed start issues.
  • If plugins endpoint errors, try root endpoint to get the ES version.
  • Make sure orderby is correct for default WooCommerce sorting. Props ivankristianto.
  • Remove operator=>AND unneed execution code.
  • Stop dashboard sync if error occurs in the middle. Props ivankristianto.
  • Add EP_INDEX_PREFIX constant. If set, index names will be prefixed with the constant. Props allan23.
  • Increase total field limit to 5000 and add filter. Props ssorathia.
  • Prevent EP from auto-activating a feature that was force deactivated
  • Prevent massive field Elasticsearch error when indexing large strings
  • Increase max result window size to 1000000 and add filter.

2.2 (Requires re-index)

Version 2.2 rethinks the module process to make ElasticPress a more complete query engine solution. Modules are now auto-on and really just features. Why would anyone want to not use amazing functionality that improves speed and relevancy on their website? Features (previously modules) can of course be overriden and disabled. Features that don’t have their minimum requirements met, such as a missing plugin dependency, are auto-disabled.

We’ve bumped the minimum Elasticsearch version to 1.7 (although we strongly recommend 2+). The maximum tested version of Elasticsearch is version 5.2. If you are running Elasticsearch outside this version range, you will see a warning in the dashboard.

Enhancements

  • (Breaking change) Module registration API changed. See register_module in classes/class-ep-modules.php.
  • (Breaking change) Related posts are now in a widget instead of automatically being appending to content.
  • (Breaking change) Admin module renamed to Protected Content.
  • Admin warning if current Elasticsearch version is not between the min/max supported version. Version 2.2 supports versions 1.3 – 5.1.
  • Auto-reindex on versions requiring reindex.
  • User friendly admin notifications for ElasticPress not set up, first sync needed, and feature auto activation.
  • Protected Content feature applies to all features. This means if Protected Content isn’t active, search or WooCommerce integration won’t happen in the admin.
  • Add support for post_mime_type. Props Ritesh-patel

Bug Fixes

  • Back compat with old ep_search function.
  • Respect indexable post types in WooCommerce feature
  • New product drafts not showing in WooCommerce admin list
  • WooCommerce feature breaking image search in media library. Props Ritesh-patel
  • WooCommerce order search broken
  • Stop the insansity made private. Props sc0ttclark
  • Fix multidimensional meta querys. Props Ritesh-patel.
  • Properly show bulk index errors in WP-CLI
  • Update ep_delete_post, include $post_type argument. Props Ritesh-patel
  • Fix post_type product getting set in any WP_Query if tax_query is provided in WooCommerce feature. Props Ritesh-patel
  • Adds ‘number’ param to satisfy WP v4.6+ fixing get_sites call. Props rveitch
  • Order by proper relevancy in WooCommerce product search. Props ivankristianto
  • Fix recursion fatal error due to oembed discovery during syncing. Props ivankristianto

2.1.2 (Requires re-index)

  • Separate mapping for ES 5.0+
  • Fix some unit tests

2.1.1

  • Fix PHP 5.3 errors
  • Properly show syncing button module placeholder during sync

2.1

  • Redo UI
  • Make plugin modular
  • Remove unnecessary back up hosts code
  • Bundle existing modules into plugin
  • Support meta_key and meta_value
  • Order by meta_value_num
  • Properly support post_parent = 0. Props tuanmh
  • Add search scope file. Props rveitch
  • Support WP_Query post_status. Props sc0ttclark

Backward compat breaks:

  • Move ep_admin_wp_query_integration to search integration only. EP integration by default is available everywhere.
  • Remove keep alive setting
  • Remove setting to integrate with search (just activate the module instead)
  • Back up hosts code removed
  • Remove active/inactive state. Rather just check if an index is going on our not.

Bug fixes

  • Fix post__in support
  • Fix paged overwriting offset
  • Fix integer and comma separated string sites WP_Query processing. Props jaisgit.

2.0.1

Bug fixes

  • Don’t load settings on front end. This fixes a critical bug causing ElasticPress to check the Elasticsearch connection on the front end.

2.0

10up ships ElasticPress 2.0 with radical search algorithm improvements and a more comprehensive integration of WP_Query. ElasticPress is now even closer to supporting the complete WP_Query API. This version also improves upon post syncing ensuring that post meta updates are synced to Elasticsearch, adds a number of important hooks, and, of course, fixes some pesky bugs.

Enhancements

  • Radical search algorithm improvements for more relevant results (see #508 for details)
  • Support meta BETWEEN queries.
  • Improve GUI by disabling index status meta box text and improving instructions. Props ivanlopez
  • Support OR relation for tax queries.
  • Sync post to Elasticsearch when meta is added/updated.
  • Support all taxonomies as root WP_Query arguments. Props tuanmh
  • Add ID field to Elasticsearch mapping
  • Support post_parent WP_Query arguments. Props tuanmh
  • Add filter to disable printing of post index status. Props tuanmh
  • Add useful CLI hooks
  • Add a filter to bypass permission checking on sync (critical for front end updates)

Bugs

  • Consider all remote request 20x responses as successful. Props tuanmh
  • Fix plugin localization. Props mustafauysal
  • Do query logging by default. Props lukaspawlik
  • Fix cannot redeclare class issue. Props tuanmh
  • Fix double querying Elasticsearch by ignoring category_name when tax_query is present.
  • Fix post deletion endpoint URL. Props lukaspawlik

A special thanks goes out to Tuan Minh Huynh and everyone else for contributions to version 2.0.

1.9.1

Quick bug fix version to address the GUI not working properly when plugin is not network enabled within multisite. Props to Ivan Lopez

1.9

ElasticPress 1.9 adds in an admin UI, where you can set your Elasticsearch Host and run your index command, without needing to us WP-CLI. Version 1.9 also adds in some performance improvements to reduce memory consumption during indexing. Full list of enhancements and bug fixes:

Enhancements:

  • Add in an Admin GUI to handle indexing. Props ChrisWiegman.
  • Add option to not disable ElasticPress while indexing. Props lukaspawlik.
  • Allow filtering of which post types we want to search for. Props rossluebe.
  • Remove composer.lock from the repo. Props ChrisWiegman.
  • Ensure both PHPUnit and WP-CLI are available in the development environment. Props ChrisWiegman.
  • User lower-case for our composer name, so packagist can find us. Props johnpbloch.
  • Check query_vars, not query to determine status. Props ChrisWiegman.
  • Improve memory usage during indexing and fix unnecessary cache flushes. Props cmmarslender.
  • Further reduce memory usage during indexing. Props lukaspawlik.
  • Add post__in and post__not_in documentation. Props mgibbs189.
  • Add Elasticsearch Shield authentication headers if constant is set. Props rveitch.

Bugs:

  • Fix the –no-bulk indexing option. Props lukaspawlik.
  • Fixed an error that occurs if no Elasticsearch host is running. Props petenelson.
  • Fixed an exception error. Props dkotter.
  • Fixed the WP-CLI status command. Props dkotter.

1.8 (Mapping change, requires reindex)

ElasticPress 1.8 adds a bunch of mapping changes for accomplishing more complex WP_Query functions such as filtering by term id and sorting by any Elasticsearch property. Version 1.8 also speeds up post syncing dramatically through non-blocking queries. Full list of enhancements and bug fixes:

Enhancements:

  • Add a filter around the search fuzziness argument. Props dkotter.
  • Make post indexing a non-blocking query. Props cmmarslender.
  • Log queries for debugging. Makes ElasticPress Debug Bar plugin possible.
  • Make posts_per_page = -1 possible.
  • Support term id and name tax queries.
  • Add raw/sortable to property to term mapping. Props sc0ttkclark
  • Add raw/sortable property to meta mapping. Props sc0ttkclark
  • Add raw/sortable to author display name and login

Bugs:

  • Fix post deletion. Props lukaspawlik.
  • Properly flush cache with wp_cache_flush. Props jstensved
  • When directly comparing meta values in a meta query, use the raw property instead of value.
  • Support arbitrary document paths in orderby. Props sc0ttkclark.

1.7 (Mapping change, requires reindex)

ElasticPress 1.7 restructures meta mapping for posts for much more flexible meta queries. The post_meta Elasticsearch post property has been left for backwards compatibility. As of this version, post meta will be stored in the meta Elasticsearch property. meta is structured as follows:

  • meta.value (string)
  • meta.raw (unanalyzed string)
  • meta.long (unanalyzed number)
  • meta.double (unanalyzed number)
  • meta.boolean (unanalyzed number)
  • meta.date (unanalyzed yyyy-MM-dd date)
  • meta.datetime (unanalyzed yyyy-MM-dd HH:mm:ss datetime)
  • time (unanalyzed HH:mm:ss time)

When querying posts, you will get back meta.value. However, if you plan to mess with the new post mapping, it’s important to understand the intricacies.

The real implications of this is in meta_query. You can now effectively search by meta types. See the new section in README.md for details on this.

1.7 also contains the following bugs/enhancements:

  • (Bug) Prevent missed post indexing when duplicate post dates. Props lukaspawlik
  • (Bug) Complex meta types are automatically serialized upon storage.
  • (Enhancement) Index posts according to post type. Props sc0ttkclark

1.6.2 (Mapping change, requires reindex)

ElasticPress 1.6.2 fixes ALL backwards compatibility issues with Elasticsearch 2.0:

  • Removes fuzzy_like_this query and uses multi_match instead.
  • Uses string instead of array for post type term when there is only one term.

1.6.1 (Mapping change, requires reindex)

ElasticPress 1.6.1 fixes mapping backwards compatibility issues with Elasticsearch 2.0:

  • Removes the fields field type from object typed fields as they should be called properties.
  • Remove path from object field types.

1.6

ElasticPress 1.6 contains a number of important enhancements and bug fixes. Most notably, we now support Elasticsearch fallback hosts and the indexing of attachments.

Bug Fixes:

  • Clean up PHP Code Sniffer errors. Props chriswiegman
  • Properly document Elasticsearch version
  • Abide by exclude_from_search instead of public when indexing post types. Props allan23 and ghosttoast.
  • Allow posts to be indexed with invalid date values. Props tuanmh
  • Support ep_post_sync_kill filter in bulk indexing. Props Stayallive

Enhancements:

  • Add blog id to ep_index_name filter. Props kovshenin
  • Support post caching in search
  • Add recursive term indexing for heirarchal taxonomies. Props tuanmh
  • Enable indexing of attachments
  • Support fallback hosts in case main EP host is unavailable. Props chriswiegman
  • Add ep_retrieve_the_post filter to support relevancy score manipulation. Props matthewspencer
  • Make search results filterable. Props chriswiegman

1.5.1

Bug Fixes:

  • Prevent notices from being thrown when non-existent index properties are accessed. This was happening for people how upgraded to 1.5 without doing a re-index. Props allan23

1.5

Bug Fixes:

Enhancements:

  • Add support for category_name WP_Query parameter. Props ocean90
  • Support limiting sites in network wide commands. Props bordoni
  • Add support for method to un-integrate WP_Query. Props kingkool68
  • Support cache_results in WP_Query
  • Add action prior to starting WP-CLI index command
  • Add missing headers to WP_CLI commands. Props chriswiegman
  • Improve error reporting in bulk indexing during bad ES requests.
  • Fix is_search check notice. Props allenmoore and allan23
  • Added a filter to modify request headers. Props tuanmh
  • Prevent bulk index from sending useless error emails. Props cmmarslender
  • Add –offset parameter to cli indexing command. Stayallive
  • Change the syncing hook to play better with plugins. Props jonathanbardo
  • Support like query in post meta. Props tuanmh
  • Sanitization fixes for PHPCS. Props mphillips
  • Added filter to set default sort order. Props HKandulla
  • MySQL DB completely removed from integrated ElasticPress WP Query. Props EduardMaghakyan and crebacz

1.4

Bug Fixes:

  • Duplicate sync post hooks separated. Props superdummy
  • Don’t send empty index error emails. Props cmmarslender
  • Remove default shard and indices configuration numbers but maintain backwards compatibility. Props zamoose
  • Fix wrong author ID in post data. Props eduardmaghakyan

Enhancements:

  • date_query and date parameters now supported in WP_Query. Props joeyblake and eduardmaghakyan
  • Make all request headers filterable
  • Add EP API key to all requests as a header if a constant is defined. Props zamoose
  • Add index exists function; remove indexes on blog deletion/deactivation. Props joeyblake
  • Refactor wp-cli stats for multisite. Props jaace
  • Index mappings array moved to separate file. Props mikaelmattsson
  • Support meta inequality comparisons. Props psorensen

1.3.1

  • Support date in WP_Query orderby. Props psorensen

1.3

  • Support meta_query in WP_Query integration
  • Improved documentation. Each WP-CLI command has been documented
  • Add elasticsearch property to global post object to assist in debugging
  • ep_integrate param added to allow for WP_Query integration without search. (Formally called ep_match_all)
  • Filter added for post statuses (defaults to publish). Change the sync mechanism to make sure it takes all post statuses into account. Props jonathanbardo
  • Bug fix: check if failed post exists in indexing. Props elliot-stocks
  • Bug fix: properly check if setup is defined in indexing. Props elliot-stocks
  • Bug fix: add WP_Query integration on init rather than plugins loaded. Props adamsilverstein
  • Bug fix: Properly set global post object post type in loop. Props tott
  • Bug fix: Do not check if index exists on every page load. Refactor so we can revert to MySQL after failed ES ping.
  • Bug fix: Make sure we check is_multisite() if --network-wide is provided. Props ivankruchkoff
  • Bug fix: Abide by the exclude_from_search flag from post type when running search queries. Props ryanboswell
  • Bug fix: Correct mapping of post_status to not_analyzed to allow for filtering of the search query (will require a re-index). Props jonathanbardo

1.2

  • Allow number of shards and replicas to be configurable.
  • Improved searching algorithm. Favor exact matches over fuzzy matches.
  • Query stack implementation to allow for query nesting.
  • Filter and disable query integration on a per query basis.
  • Support orderbyparameter inWP_Query
  • (Bug) We don’t want to add the like_text query unless we have a non empty search string. This mimcs the behavior of MySQL or WP which will return everything if s is empty.
  • (Bug) Change delete action to action_delete_post instead of action_trash_post
  • (Bug) Remove _boost from mapping. _boost is deprecated by Elasticsearch.
  • Improve unit testing for query ordering.

1.1

  • Refactored is_alive, is_activated, and is_activated_and_alive. We now have functions is_activated, elasticsearch_alive, index_exists, and is_activated. This refactoring helped us fix #150.
  • Add support for post_title and post_name orderby parameters in WP_Query integration. Add support for order parameters.

1.0

  • Support search_fields parameter. Support author, title, excerpt, content, taxonomy, and meta within this parameter.
  • Move all management functionality to WP-CLI commands
  • Remove ES_Query and support everything through WP_Query
  • Disable sync during import
  • Check for valid blog ids in index names
  • Improved bulk error handling
  • No need for ep_last_synced meta
  • No need for syncing taxonomy
  • Improved unit test coverage
  • sites WP_Query parameter to allow for search only on specific blogs

0.1.2

  • Only index public taxonomies
  • Support ES_Query parameter that designates post meta entries to be searched
  • Escape post ID and site ID in API calls
  • Fix escaping issues
  • Additional tests
  • Translation support
  • Added is_alive function for checking health status of Elasticsearch server
  • Renamed statii to status

0.1.0

  • Initial plugin