Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Modernizing WordPress Search with Elasticsearch

912 views

Published on

Learn how to optimize WordPress search and performance with Elasticsearch and ElasticPress.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Modernizing WordPress Search with Elasticsearch

  1. 1. Modernizing WordPress Search with Elasticsearch
  2. 2. Who Am I? • My name is Taylor Lovett • Director of Web Engineering at 10up • Open source community member • WordPress core contributor • ElasticPress team member @tlovett12
  3. 3. Doesn’t WordPress have search built-in?
  4. 4. WordPress Search is Rudimentary • Only searches post title, content, and excerpt. • Relies on MySQL and thus is slow. • Relevancy calculations are poor and overly simplistic. • Not able to handle any advanced filtering.
  5. 5. Think Beyond Search
  6. 6. WordPress Complex Queries Are Slow • Querying for posts that contain multiple meta keys. • Querying for posts that contain multiple taxonomies.
  7. 7. What is Elasticsearch? http://www.elastic.co
  8. 8. Elasticsearch • Open-source search server written in Java based on a technology called Lucene (open- source search software by Apache). • A standalone database server that provides a RESTful interface to accept and store data in a way that is optimized for search and multi- dimensional queries. • Extremely scalable, performant, and reliable
  9. 9. Elasticsearch • Relevant results • Performant aggregation queries • Autosuggest • Fuzzy matching • Geographic searches and queries • Filterable searches and queries • Data weighting • Much more
  10. 10. Get an Elasticsearch Server • Very flexible and customizable. There is not really a “one size fits all” setup. Generally, you have two options: • Option 1: Pay someone else to manage/host your Elasticsearch cluster (SaaS) • Option 2: Host your own cluster
  11. 11. Elasticsearch SaaS • elasticpress.io • qbox.io • heroku.com • etc…
  12. 12. What is ElasticPress? https://wordpress.org/plugins/elasticpress
  13. 13. ElasticPress A free 10up WordPress plugin that creates a framework for dramatically improving WordPress performance and search.
  14. 14. ElasticPress • Build filterable performant queries (filter by taxonomy term, post meta key, etc.). • Fuzzy search post title, content, excerpt, taxonomy terms, post meta, and authors. • Search across multiple blogs in a multisite instance. • Search results returned by relevancy. Relevancy calculations are highly customizable. Weight results by date. • Very extensible and performant.
  15. 15. ElasticPress Requirements • WordPress 3.7+ • An instance of Elasticsearch.
  16. 16. Installation • Github: http://github.com/10up/elasticpress • WordPress.org: http://wordpress.org/plugins/ elasticpress
  17. 17. Point to Your ES Instance
  18. 18. Sync Your Content • Just activating the plugin will do nothing. We need to sync (index) our content.
  19. 19. Sync Your Content
  20. 20. Integrate with Search • Now that our content is synced, we have access to all the powerful ElasticPress functionality i.e. query content through ElasticPress and install ElasticPress modules (WooCommerce). • We need to tell ElasticPress to run all our search queries through Elasticsearch
  21. 21. Integrate with Search
  22. 22. What Happens Next? • Once ElasticPress is activated and posts are indexed, it will integrate with WP_Query to run queries against Elasticsearch instead of MySQL. • WP_Query integration will only happen on search queries (if “Elasticsearch integration” is enabled) or when the ep_integrate parameter is passed.
  23. 23. Query Integration new WP_Query( array(
 ’s’ => ‘search terms’,
 ‘author_name’ => ‘taylor’,
 …
 ) ); new WP_Query( array(
 ’ep_integrate’ => ‘true’,
 ‘author_name’ => ‘taylor’,
 …
 ) ); new WP_Query( array(
 ‘author_name’ => ‘taylor’,
 …
 ) );
  24. 24. Advanced Queries • Search taxonomy terms • Filter by taxonomy terms (unlimited dimensions) • Search post meta • Filter by post meta (unlimited dimensions) • Search authors • Filter by authors • Search across blogs in multisite • Complex date filtering • more!
  25. 25. Example Queries new WP_Query( array(
 ’s’ => ‘vienna austria’,
 ‘sites’ => ‘all’,
 ) );
  26. 26. Example Queries new WP_Query( array(
 ’s’ => ‘vienna austria’,
 ‘search_fields’ => array(
 ‘post_title’,
 ‘post_content’,
 ‘taxonomies’ => array( ‘category’ ),
 ),
 ) );
  27. 27. Example Queries new WP_Query( array(
 ’s’ => ‘vienna austria’,
 ‘post_type’ => ‘page’,
 ‘author_name’ => ‘taylor’,
 ‘search_fields’ => array(
 ‘post_title’,
 ‘post_content’,
 ‘meta’ => array( ‘city_name’ ),
 ),
 ) );
  28. 28. Example Queries new WP_Query( array(
 ’s’ => ‘vienna austria’,
 ‘tax_query’ => array(
 array(
 ‘taxonomy’ => ‘category’,
 ‘terms’ => array( ‘term1’, ‘term2’ ),
 ),
 ),
 ‘search_fields’ => array(
 ‘post_title’,
 ‘post_content’,
 ‘meta’ => array( ‘city_name’ ),
 ‘author_name’,
 ),
 ‘site’ => 3,
 ) );
  29. 29. Example Queries new WP_Query( array(
 ‘tax_query’ => array(
 array(
 ‘taxonomy’ => ‘category’,
 ‘terms’ => array( ‘term1’, ‘term2’ ),
 ‘operator’ => ‘or’,
 ),
 array(
 ‘taxonomy’ => ‘custom_tax’,
 ‘terms’ => array( ‘customterm1’ ),
 ),
 array(
 ‘taxonomy’ => ‘post_tag’,
 ‘terms’ => array( ‘tag1’ ),
 ),
 ‘relation’ => ‘OR’,
 ),
 ) );
  30. 30. Example Queries new WP_Query( array(
 ‘meta_query’ => array(
 array(
 ‘key’ => ‘city_name’,
 ‘value’ => ‘vienna’,
 ),
 array(
 ‘key’ => ‘number_key’,
 ‘value’ => 5,
 ‘compare’ => ‘>’,
 ),
 array(
 ‘key’ => ‘exists_key’,
 ‘compare’ => ‘exists’,
 ),
 ),
 ) );
  31. 31. WP_Query Integration • We want to be able to run all (slower) WP_Query instances through Elasticsearch. • This means we have to support every query parameter which isn’t the case yet. Github contains a full list of parameters WP_Query supports with ElasticPress and usage for each parameter.
  32. 32. ElasticPress Modules • We want to speed up all things WordPress. This includes third party plugins too.
  33. 33. ElasticPress Modules • ElasticPress WooCommerce
 http://wordpress.org/plugins/elasticpress- woocommerce • ElasticPress Related Posts
 https://github.com/10up/ElasticPress-Related- Posts • More coming soon.
  34. 34. ElasticPress in Your Language • ElasticPress is designed to be internationalized. • Out of the box, it will work fine with most languages.
  35. 35. Analysis and Analyzers • When a document is indexed in Elasticsearch, text is analyzed, broken into terms (tokenized), and normalized with token filters. • In normalization, strings might be lowercased and plurals stripped.
  36. 36. Custom Analyzers • ElasticPress by default uses a pretty standard set of analyzers intended for the English language. • We can easily customize our analyzers for use with other languages by filtering ep_config_mapping (see EP source code). • You can read about language specific analyzers here:
 
 http://www.elasticsearch.org/guide/en/elasticsearch/ reference/current/analysis-lang-analyzer.html
  37. 37. Documentation Full documentation with installation instructions:
 
 https://github.com/10up/ElasticPress
  38. 38. Feedback and Continuing Development • If you are using ElasticPress on a project, please let us know and give us feedback. • Pull requests are welcome!
  39. 39. Questions? We need to send a PUT request to this endpoint with our post data. Of course we must authenticate before doing this. @tlovett12 taylor.lovett@10up.com

×