This plugin allows Moodle to use Elasticsearch as the search engine for Moodle's Global Search.
The following features are provided by this plugin:
This plugin currently supports Moodle:
| Moodle version | Branch |
|---|---|
| Moodle 4.4 and up | MOODLE_404_STABLE |
| Moodle 4.2 to 4.3 | MOODLE_402_STABLE |
| Moodle 3.10 to 4.1 | MOODLE_310_STABLE |
| Moodle 3.5 to 3.9 | master |
Currently, this plugin is tested to work against the following versions of Elasticsearch:
And following version of OpenSearch:
This plugin has been tested to work on the following cloud platforms:
To use this plugin first you will need to setup an Elaticsearch service.
The following is the bare minimum to get Elasticsearch working in a Debian/Ubuntu Operating System environment. Consult the Elasticsearch Documention for in depth instructions, or for details on how to install on other operating systems.
NOTE: The instructions below should only be used for test and dev purposes. Don't do this in production. For a production setup we recommend Elasticsearch running as a cluster, getting started documentation can be found here: https://www.elastic.co/guide/en/elasticsearch/reference/current/setup.html
Elasticsearch requires Java as a prerequisite, to install Java:
sudo apt-get install default-jre default-jdkOnce Java is installed, the following commands will install and start Elasticsearch.
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.1.deb
sudo dpkg -i elasticsearch-6.6.1.deb
sudo update-rc.d elasticsearch defaults
sudo service elasticsearch startA quick test can be performed by running the following from the command line.
curl -X GET 'http://localhost:9200'
The output should look something like:
{
"name" : "1QHLiux",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "mLRqIsnVRrGdgg2OfHWNrg",
"version" : {
"number" : "5.1.2",
"build_hash" : "c8c4c16",
"build_date" : "2017-01-11T20:18:39.146Z",
"build_snapshot" : false,
"lucene_version" : "6.3.0"
},
"tagline" : "You Know, for Search"
}By default the Elasticsearch service is available on: http://localhost:9200
You can also run Elasticsearch with Docker. The project publishes an offical container for supported version with instructions.
To use this plugin first you will need to setup an Elaticsearch service.
To use Microsoft Azure to provide an Elasticsearch service for Moodle:
Elasticsearch requires Java as a prerequisite, to install Java:
sudo apt-get install default-jre default-jdk
Once Java is installed, the following commands will install and start Elasticsearch.
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.0.deb
sudo dpkg -i elasticsearch-5.5.0.deb
sudo update-rc.d elasticsearch defaults
sudo service elasticsearch start
A quick test can be performed by running the following from the command line.
curl -X GET 'http://localhost:9200'
The output should look something like:
{
"name" : "1QHLiux",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "mLRqIsnVRrGdgg2OfHWNrg",
"version" : {
"number" : "5.1.2",
"build_hash" : "c8c4c16",
"build_date" : "2017-01-11T20:18:39.146Z",
"build_snapshot" : false,
"lucene_version" : "6.3.0"
},
"tagline" : "You Know, for Search"
}
To use this plugin first you will need to setup an Elaticsearch service.
To use Amazon Webservices (AWS) to provide an Elasticsearch service for Moodle:
To use Elastic Cloud to provide an Elasticsearch service for Moodle:
Once you have setup an Elasticsearch service you can now install the Moodle plugin.
These setup steps are the same regardless of how you have setup the Elasticsearch service.
<moodledir>/search/engine/elastic
sudo -u www-data php admin/cli/upgrade Note: the user may be different to www-data on your system.Once you have setup an Elasticsearch service you can now configure the Moodle plugin.
These setup steps are the same regardless of how you have setup the Elasticsearch service.
sudo -u www-data php search/cli/indexer.php --force
This plugin uses Apache Tika for file indexing support. Tika parses files, extracts the text, and return it via a REST API.
Currently this plugin is tested to work against the following versions of Tika:
Setting up a Tika test service is straight forward. In most cases on a Linux environment, you can simply download the Java JAR then run the service.
wget http://apache.mirror.amaze.com.au/tika/tika-server-1.16.jar
java -jar tika-server-1.16.jar
This will start Tika on the host. By default the Tika service is available on: http://localhost:9998
Once a Tika service is available the Elasticsearch plugin in Moodle needs to be configured for file indexing support.
Assuming you have already followed the basic installation steps, to enable file indexing support:
From the Apache Tika website:
The Apache Tika™ toolkit detects and extracts metadata and text from over a thousand different file types (such as PPT, XLS, and PDF). All of these file types can be parsed through a single interface, making Tika useful for search engine indexing, content analysis, translation, and much more. You can find the latest release on the download page. Please see the Getting Started page for more information on how to start using Tika.
It is common to see Elasticsearch implementations using an Elasticsearch file indexing plugin rather than a stand alone service. Current Elasticsearch plugins are a wrapper around Tika. (The Solr search engine also uses Tika).
Using Tika as a standalone service has the following advantages:
Extracting contents from binary data is a resource intensive operation and consumes a lot of resources. It is highly recommended to run pipelines using this processor in a dedicated ingest node.
This plugin can use the Amazon Web Services (AWS) [Rekognition service(https://aws.amazon.com/rekognition/) to identify the contents of images. The identified content is then indexed by Elasticsearch and can be searched for in Moodle (cool huh?).
NOTE: Indexing of files by Moodle's core Global Search is currently limited to only indexing files from a couple of places. Tracker issue MDL-59459 has been raised to increase the coverage of the files indexed by Global Search.
Currently the best resource to use to test image search functionality it so add an image via the Moodle course file resource.
Once you have setup Elasticsearch in AWS Moodle needs to be configured for Image Recognition.
Assuming you have already followed the basic installation steps and the file indexing steps, to enable Image Recognition:
NOTE: You will need a set of AWS API keys for an AWS IAM user with full Rekognition permissions. Setting this up is beyond the scope of this README. for further information see the AWS Documentation.
Amazon Web Services (AWS) provide Elasticsearch as a managed service. This makes it easy to provision and manage and Elasticsearch cluster.
One of the ways you can secure access to your data in Elasticsearch when using AWS is to use request signing. Request signing allows only valid signed requests to be accepted by the Elasticsearch endpoint. Requests that are unsigned are not authorised to access the endpoint.
Once you have setup Elasticsearch in AWS Moodle needs to be configured for Request Signing.
Assuming you have already followed the basic installation steps, to enable Request Signing:
This plugin exposes two AJAX enabled webservices, to allow you to integrate Moodle's Global search with other systems and services. The two available webservices are:
Setup and documentation of these services is connsistent with other Moodle core web services.
This plugin sets up a pre-configured External service called Search service when the plugin is installed. This service adds and enables the two webservice methods provided by this plugin.
NOTE: You will need to have Global search and this plugin enabled and configured correctly before you can use the provided web services.
In order to run the PHP Unit tests for this plugin you need to setup and configure an Elasticsearch instance as will as supply the instance details to Moodle. You need to define:
To define the required variables in via your Moodle configuration file, add the following to config.php:
define('TEST_SEARCH_ELASTIC_HOSTNAME', 'http://127.0.0.1');
define('TEST_SEARCH_ELASTIC_PORT', 9200);
define('TEST_SEARCH_ELASTIC_INDEX', 'moodle_test_2');
The required Elasticserach instance configuration variables can also be provided as environment variables. To do this at the Linux command line:
export TEST_SEARCH_ELASTIC_HOSTNAME=http://127.0.0.1; export TEST_SEARCH_ELASTIC_PORT=9200; export TEST_SEARCH_ELASTIC_INDEX=moodle_test
First initialise the test environment, from the Moodle code home directory: php admin/tool/phpunit/cli/init.php
To run only this plugins tests: vendor/bin/phpunit search_elastic_engine_testcase search/engine/elastic/tests/engine_test.php
This plugin was developed by Catalyst IT Australia:
https://www.catalyst-au.net/

Issues, and pull requests using github are welcome and encouraged!
https://github.com/catalyst/moodle-search_elastic/issues
If you would like commercial support or would like to sponsor additional improvements to this plugin please contact us:
https://www.catalyst-au.net/contact-us