ElasticSearch by jonathan-dart

An ElasticSearch module for ProcessWire

ElasticSearch for ProcessWire 0.4.4

About ElasticSearch for ProcessWire

The ElasticSearch module for ProcessWire CMS/CMF will add your page content to an ElasticSearch index per site, and give you a convenient way to search it.


  • Make sure the PHP cURL library is installed. (apt-get install php5-curl)
  • Install ElasticSearch.
  • Install this module, the usual methods apply.
  • In the module settings configure your ElasticSearch IP and port, and click save.
  • In the module settings click "Index All Pages".


Synchonizing Page Data with ElasticSearch

When pages are saved, deleted, trashed, and restored ElasticSearch will be notified accordingly, so after you've clicked "Index All Pages" you shouldn't need to think about it again.

What gets searched?

Most content from a page should be seachable: text fields, translated fields, repeaters and filenames.


This module has a function search() that returns a PageArray.

$search_results = $modules->get('ElasticSearch')->search('foo bar'); 


The MarkupPagerNav module should work out of the box.

$search_results = $modules->get('ElasticSearch')->search('foo bar', $results_per_page); 

echo "Total results: " . $search_results->getTotal();

echo $search_results->renderPagination();

Minimum Scores

The search function also takes a 3rd parameter to configure the minimum score required for a page to match.

$search_results = $modules->get('ElasticSearch')->search('foo bar', $results_per_page, 0.05);

Custom Queries

By default this module uses a fuzzy_like_this query to match pages. To change that use an array for the 1st parameter when calling search.

$search_results = $modules->get('ElasticSearch')->search(array(
    'query' => array(
        'match' => array(
            '_all' => 'foo bar',



This plugin will create an index based on the http host, so if you have many sites one one server they can all safely use the same ElasticSearch server, no special configuration is required to support multiple sites.

Configuring ElasticSearch can be very simple, if running ElasticSearch on a single server you really only need the below configuration in /etc/elasticsearch/elasticsearch.yml:

index.number_of_shards: 1
index.number_of_replicas: 0
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: []

Install and use modules at your own risk. Always have a site and database backup before installing new modules.

Twitter updates

  • Great video by @jlahijani that demonstrates his ProcessWire page builder using ProFields Repeater Matrix, the new Page Autosave + Live Preview module and Uikit 3— youtube.com/watch?v=Rb5kiU…
    13 November 2021
  • More development on page automatic save this week, plus the addition of live preview— More
    12 November 2021
  • ProcessWire 3.0.189 core updates— More
    5 November 2021

Latest news

  • ProcessWire Weekly #393
    In the 393rd issue of ProcessWire Weekly we'll cover the latest core and module updates, check out a brand new module called Anonymize fields, and highlight some recent tutorials and other online resources. Read on!
    Weekly.pw / 20 November 2021
  • New Repeater and Repeater Matrix features
    This week we have some very useful new additions to both the core Repeater Fieldtype and the ProFields Repeater Matrix Fieldtype. This post covers all the details along with a couple of brief demonstration videos. 
    Blog / 22 October 2021
  • Subscribe to weekly ProcessWire news

“To Drupal, or to ProcessWire? The million dollar choice. We decided to make an early switch to PW. And in retrospect, ProcessWire was probably the best decision we made. Thanks are due to ProcessWire and the amazing system and set of modules that are in place.” —Unni Krishnan, Founder of PigtailPundits