SlideShare a Scribd company logo
Modernizing WordPress
Search with Elasticsearch
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
Doesn’t WordPress have
search built-in?
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.
Think Beyond Search
WordPress Complex Queries Are Slow
• Querying for posts that contain multiple meta
keys.
• Querying for posts that contain multiple
taxonomies.
What is Elasticsearch?
http://www.elastic.co
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
Elasticsearch
• Relevant results
• Performant aggregation queries
• Autosuggest
• Fuzzy matching
• Geographic searches and queries
• Filterable searches and queries
• Data weighting
• Much more
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
Elasticsearch SaaS
• elasticpress.io
• qbox.io
• heroku.com
• etc…
What is ElasticPress?
https://wordpress.org/plugins/elasticpress
ElasticPress
A free 10up WordPress plugin that creates a
framework for dramatically improving
WordPress performance and search.
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.
ElasticPress Requirements
• WordPress 3.7+
• An instance of Elasticsearch.
Installation
• Github: http://github.com/10up/elasticpress
• WordPress.org: http://wordpress.org/plugins/
elasticpress
Point to Your ES Instance
Sync Your Content
• Just activating the plugin will do nothing. We
need to sync (index) our content.
Sync Your Content
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
Integrate with Search
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.
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’,

…

) );
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!
Example Queries
new WP_Query( array(

’s’ => ‘vienna austria’,

‘sites’ => ‘all’,

) );
Example Queries
new WP_Query( array(

’s’ => ‘vienna austria’,

‘search_fields’ => array(

‘post_title’,

‘post_content’,

‘taxonomies’ => array( ‘category’ ),

),

) );
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’ ),

),

) );
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,

) );
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’,

),

) );
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’,

),

),

) );
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.
ElasticPress Modules
• We want to speed up all things WordPress. This
includes third party plugins too.
ElasticPress Modules
• ElasticPress WooCommerce

http://wordpress.org/plugins/elasticpress-
woocommerce
• ElasticPress Related Posts

https://github.com/10up/ElasticPress-Related-
Posts
• More coming soon.
ElasticPress in Your Language
• ElasticPress is designed to be internationalized.
• Out of the box, it will work fine with most
languages.
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.
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
Documentation
Full documentation with installation instructions:



https://github.com/10up/ElasticPress
Feedback and Continuing Development
• If you are using ElasticPress on a project, please
let us know and give us feedback.
• Pull requests are welcome!
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

More Related Content

What's hot (20)

PDF
Unlocking the Magical Powers of WP_Query
Dustin Filippini
 
PDF
Isomorphic WordPress Applications with NodeifyWP
Taylor Lovett
 
PDF
JSON REST API for WordPress
Taylor Lovett
 
PPTX
The JSON REST API for WordPress
Taylor Lovett
 
PPTX
Enhance WordPress Search Using Sphinx
Roshan Bhattarai
 
PPTX
Combining Django REST framework & Elasticsearch
Yaroslav Muravskyi
 
PPTX
Caching, Scaling, and What I've Learned from WordPress.com VIP
Erick Hitter
 
PDF
Django Rest Framework - tips & trick
Luca Zacchetti
 
PDF
Ako prepojiť aplikáciu s Elasticsearch
bart-sk
 
PDF
Dcm#8 elastic search
Ivan Wallarm
 
PPTX
Day 7 - Make it Fast
Barry Jones
 
PPTX
Day 4 - Models
Barry Jones
 
PPTX
Django rest framework
Blank Chen
 
PPT
DSpace UI Prototype Challenge: Spring Boot + Thymeleaf
Tim Donohue
 
PPTX
Ch7(publishing my sql data on the web)
Chhom Karath
 
PDF
Elastic Search
Lukas Vlcek
 
PPTX
Get Django, Get Hired - An opinionated guide to getting the best job, for the...
Marcel Chastain
 
PPT
Rest services caching
Sperasoft
 
PDF
JSON REST API for WordPress
Taylor Lovett
 
PDF
Introduction to CQ5
Michele Mostarda
 
Unlocking the Magical Powers of WP_Query
Dustin Filippini
 
Isomorphic WordPress Applications with NodeifyWP
Taylor Lovett
 
JSON REST API for WordPress
Taylor Lovett
 
The JSON REST API for WordPress
Taylor Lovett
 
Enhance WordPress Search Using Sphinx
Roshan Bhattarai
 
Combining Django REST framework & Elasticsearch
Yaroslav Muravskyi
 
Caching, Scaling, and What I've Learned from WordPress.com VIP
Erick Hitter
 
Django Rest Framework - tips & trick
Luca Zacchetti
 
Ako prepojiť aplikáciu s Elasticsearch
bart-sk
 
Dcm#8 elastic search
Ivan Wallarm
 
Day 7 - Make it Fast
Barry Jones
 
Day 4 - Models
Barry Jones
 
Django rest framework
Blank Chen
 
DSpace UI Prototype Challenge: Spring Boot + Thymeleaf
Tim Donohue
 
Ch7(publishing my sql data on the web)
Chhom Karath
 
Elastic Search
Lukas Vlcek
 
Get Django, Get Hired - An opinionated guide to getting the best job, for the...
Marcel Chastain
 
Rest services caching
Sperasoft
 
JSON REST API for WordPress
Taylor Lovett
 
Introduction to CQ5
Michele Mostarda
 

Similar to Modernizing WordPress Search with Elasticsearch (20)

PDF
Wordpress search-elasticsearch
Taylor Lovett
 
PPTX
PostgreSQL - It's kind've a nifty database
Barry Jones
 
PPTX
Getting started with Laravel & Elasticsearch
Peter Steenbergen
 
PPTX
Episerver and search engines
Mikko Huilaja
 
PDF
Full Text Search In PostgreSQL
Karwin Software Solutions LLC
 
PPTX
Search and analyze your data with elasticsearch
Anton Udovychenko
 
PPTX
Elasticsearch for Autosuggest in Clojure at Workframe
Brian Ballantine
 
PPTX
An Introduction to Elastic Search.
Jurriaan Persyn
 
PDF
ElasticSearch: Distributed Multitenant NoSQL Datastore and Search Engine
Daniel N
 
PDF
Using ElasticSearch as a fast, flexible, and scalable solution to search occu...
kristgen
 
PDF
Infinispan,Lucene,Hibername OGM
JBug Italy
 
PDF
[2D1]Elasticsearch 성능 최적화
NAVER D2
 
PDF
[2 d1] elasticsearch 성능 최적화
Henry Jeong
 
PPT
Advanced full text searching techniques using Lucene
Asad Abbas
 
PPTX
Elastic & Azure & Episever, Case Evira
Mikko Huilaja
 
PPTX
Perl and Elasticsearch
Dean Hamstead
 
PPTX
More on Fitnesse and Continuous Integration (Silicon Valley code camp 2012)
Jen Wong
 
PPTX
06 integrate elasticsearch
Erhwen Kuo
 
PPT
Technologies for Websites
Compare Infobase Limited
 
PPT
Technical Utilities for your Site
Compare Infobase Limited
 
Wordpress search-elasticsearch
Taylor Lovett
 
PostgreSQL - It's kind've a nifty database
Barry Jones
 
Getting started with Laravel & Elasticsearch
Peter Steenbergen
 
Episerver and search engines
Mikko Huilaja
 
Full Text Search In PostgreSQL
Karwin Software Solutions LLC
 
Search and analyze your data with elasticsearch
Anton Udovychenko
 
Elasticsearch for Autosuggest in Clojure at Workframe
Brian Ballantine
 
An Introduction to Elastic Search.
Jurriaan Persyn
 
ElasticSearch: Distributed Multitenant NoSQL Datastore and Search Engine
Daniel N
 
Using ElasticSearch as a fast, flexible, and scalable solution to search occu...
kristgen
 
Infinispan,Lucene,Hibername OGM
JBug Italy
 
[2D1]Elasticsearch 성능 최적화
NAVER D2
 
[2 d1] elasticsearch 성능 최적화
Henry Jeong
 
Advanced full text searching techniques using Lucene
Asad Abbas
 
Elastic & Azure & Episever, Case Evira
Mikko Huilaja
 
Perl and Elasticsearch
Dean Hamstead
 
More on Fitnesse and Continuous Integration (Silicon Valley code camp 2012)
Jen Wong
 
06 integrate elasticsearch
Erhwen Kuo
 
Technologies for Websites
Compare Infobase Limited
 
Technical Utilities for your Site
Compare Infobase Limited
 
Ad

Recently uploaded (20)

PDF
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
PPTX
OpenID AuthZEN - Analyst Briefing July 2025
David Brossard
 
PPTX
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
PDF
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
PDF
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
PDF
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
PDF
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
PDF
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
PDF
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 
PDF
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
PDF
Fl Studio 24.2.2 Build 4597 Crack for Windows Free Download 2025
faizk77g
 
PDF
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 
PDF
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
PPTX
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
PDF
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
PDF
July Patch Tuesday
Ivanti
 
PDF
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PPTX
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
OpenID AuthZEN - Analyst Briefing July 2025
David Brossard
 
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
Fl Studio 24.2.2 Build 4597 Crack for Windows Free Download 2025
faizk77g
 
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
July Patch Tuesday
Ivanti
 
New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
Ad

Modernizing WordPress Search with Elasticsearch

  • 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
  • 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.
  • 6. WordPress Complex Queries Are Slow • Querying for posts that contain multiple meta keys. • Querying for posts that contain multiple taxonomies.
  • 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. Elasticsearch • Relevant results • Performant aggregation queries • Autosuggest • Fuzzy matching • Geographic searches and queries • Filterable searches and queries • Data weighting • Much more
  • 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. Elasticsearch SaaS • elasticpress.io • qbox.io • heroku.com • etc…
  • 13. ElasticPress A free 10up WordPress plugin that creates a framework for dramatically improving WordPress performance and search.
  • 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. ElasticPress Requirements • WordPress 3.7+ • An instance of Elasticsearch.
  • 16. Installation • Github: http://github.com/10up/elasticpress • WordPress.org: http://wordpress.org/plugins/ elasticpress
  • 17. Point to Your ES Instance
  • 18. Sync Your Content • Just activating the plugin will do nothing. We need to sync (index) our content.
  • 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
  • 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. 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. 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. Example Queries new WP_Query( array(
 ’s’ => ‘vienna austria’,
 ‘sites’ => ‘all’,
 ) );
  • 26. Example Queries new WP_Query( array(
 ’s’ => ‘vienna austria’,
 ‘search_fields’ => array(
 ‘post_title’,
 ‘post_content’,
 ‘taxonomies’ => array( ‘category’ ),
 ),
 ) );
  • 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. 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. 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. 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. 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. ElasticPress Modules • We want to speed up all things WordPress. This includes third party plugins too.
  • 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. ElasticPress in Your Language • ElasticPress is designed to be internationalized. • Out of the box, it will work fine with most languages.
  • 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. 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. Documentation Full documentation with installation instructions:
 
 https://github.com/10up/ElasticPress
  • 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. Questions? We need to send a PUT request to this endpoint with our post data. Of course we must authenticate before doing this. @tlovett12 [email protected]