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.2 and up | 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-jdk
Once 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 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"
}
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"
}
## AWS Elasticsearch Setup
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:
1. Create an AWS account: [Account creation guide](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/)
2. Setup an Elasticsearch service: [AWS Elasticsearch setup guide](http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-createupdatedomains.html)
## Elastic Cloud Setup
To use Elastic Cloud to provide an Elasticsearch service for Moodle:
1. Create an Elastic Cloud account and set up Elasticsearch: [Elasticsearch: Getting Started](https://www.elastic.co/webinars/getting-started-elasticsearch?baymax=default&elektra=docs&storm=top-video)
2. Generate API Key for your search index and set this key to the moodle plugin settings.
## Moodle Plugin Installation
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.
1. Get the code and copy/ install it to: `
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`
### Enabling File indexing support in Moodle
Once a Tika service is available the Elasticsearch plugin in Moodle needs to be configured for file indexing support.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.### Why use Tika as a stand alone service? 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).
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.## Image Recognition and Indexing 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](https://tracker.moodle.org/browse/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. ### Enabling image recognition and indexing support in Moodle Once you have setup Elasticsearch in AWS Moodle needs to be configured for Image Recognition.
define('TEST_SEARCH_ELASTIC_HOSTNAME', 'http://127.0.0.1');
define('TEST_SEARCH_ELASTIC_PORT', 9200);
define('TEST_SEARCH_ELASTIC_INDEX', 'moodle_test_2');
### Setup via Environment variables
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
### Running the tests
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`
# Crafted by Catalyst IT
This plugin was developed by Catalyst IT Australia:
https://www.catalyst-au.net/
![Catalyst IT](/pix/catalyst-logo.png?raw=true)
# Contributing and Support
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