Global search
What is Global search?
- Global search lets you search everywhere on the Moodle site that you have access to. A student can search their courses for particular lecture notes, for example, or a teacher could search for subject-related activities.
- The feature needs to be enabled by the administrator and a search box is then available next to the user menu.
- A Global search block may also be added to course pages.
How does it work?
- Click the search icon by the user menu and type a search term into the box that appears, or type into the box in the Global search block if enabled.
- On the next screen, you can simply click the search button to search everywhere, or expand the Filter to search in specific areas:
- You will then see results displayed from all areas of Moodle you have access to:
Search query features
You can improve your search using any of the following search query features:
- Specifying the field to be searched by prefixing the search query with 'title:', 'content:', 'name:', or 'intro:' e.g.'title:news' returns results with the word 'news' in the title
- Boolean operators ('AND', 'OR', 'NOT') to combine or exclude keywords
- Wildcard characters ('*' or '?' ) to represent characters in the search query
- Proximity Searches ('~') e.g. mood~2 returns "moodle" (2 letters away from "mood"), Moodle Australia~3 returns results containing "Moodle HQ in Perth, Australia" (the queried terms were within 3 words of each other)
- Boosting Terms ('^') to boost certain words or phrases e.g. "Perth Australia"^5 "Australia" will return results with the phrase "Perth Australia" as more relevant.
How is it set up?
Note: Global search needs a search engine. Instructions for the installing the PHP Solr extension and a Solr server are below. See the Developer docs on Search engine plugins if you wish to write your own. It's recommended you set everything up first, index the site contents and only then enable Global search. |
- Set the feature up in Site administration > Plugins > Search > Manage global search by selecting Solr as the search engine and ticking search area checkboxes as required
- In Site administration > Plugins > Search > Solr, set Host name to localhost, Port to 8983 and Index name to 'moodle' (the name of the index in Solr)
- If you are using Solr with SSL encryption, you will need to configure Moodle as such. This is important if solr is not installed in the web server server.
- You will need a separate key file and cacert file, both in pem format, located on your server Moodle, and readable by the PHP process.
- Go to Site administration > Plugins > Search > Solr
- Set Secure mode to Yes
- SSL certificate to /path/to/certs/solr-ssl.cacert.pem
- SSL key to /path/to/certs/solr-ssl.key.pem
- SSL key Password to The password used to lock the SSL Key
- SSL CA certificates name to /path/to/certs/solr-ssl.cacert.pem
- Index your site's data going to Site administration > Reports > Global search info or from the CLI running php admin/tool/task/cli/schedule_task.php --execute="\core\task\search_index_task" script, being the CLI script the recommended option for big sites.
- Enable Global search in Site administration > Advanced features
How to install Solr
You need PHP Solr extension installed. You can download the official latest versions from [1](http://pecl.php.net/package/solr) The minimum required version is PECL Solr 2.1 for PHP 5 branch and PECL Solr 2.4 for PHP 7 branch.
Basic installation steps (using apache web server):
Linux (Debian/Ubuntu)
sudo apt-get install libpcre3-dev libxml2-dev libcurl4-openssl-dev sudo apt-get install php5-dev sudo apt-get install php-pear sudo pecl install solr sudo service apache2 restart sudo sh -c "echo 'extension=solr.so' > /etc/php5/apache2/conf.d/solr.ini" sudo sh -c "echo 'extension=solr.so' > /etc/php5/cli/conf.d/solr.ini"
OSX using macports
sudo port install apache-solr4 sudo port install php54-solr
OSX using homebrew
brew install homebrew/php/php56-solr
Windows
Install the pecl package as usual. (This has not yet been tested.)
The Solr server
Moodle 3.1 supports Solr server from 4.0 onwards, although you can only use the Solr schema setup script that we provide with Moodle from Solr 5. The latest Solr 5 available version is the recommended one; the same will apply to Solr 6 once it is released.
The following example snippet (feel free to copy & paste into a .sh script with execution permissions) will download Solr 5.4.1 (replace it with latest 5.x) in the current directory, start the solr server and create an index in it named moodle to add moodle data to it.
#!/bin/bash set -e SOLRVERSION=5.4.1 SOLRNAME=solr-$SOLRVERSION SOLRTAR=$SOLRNAME'.tgz' INDEXNAME=moodle if [ -d $SOLRNAME ]; then echo "Error: Directory $SOLRNAME already exists, remove it before starting the setup again." exit 1 fi if [ ! -f $SOLRTAR ]; then wget http://www-us.apache.org/dist/lucene/solr/$SOLRVERSION/$SOLRTAR fi tar -xvzf $SOLRTAR cd $SOLRNAME bin/solr start bin/solr create -c $INDEXNAME # After setting it up and creating the index use: # - "/yourdirectory/solrdir/bin/solr start" from CLI to start the server # - "/yourdirectory/solrdir/bin/solr stop" from CLI to stop the server.
Solr 5/6 schema setup
Moodle will use Solr's managed schema interface to install the required fields. You will be directed on what to do from the Manage global search page.
For very large or busy sites, it is recommended that you manually remove the _text_ field, and associated copy directive from, the default Solr schema. This field is not used by Moodle, and will significantly slow indexing, and increase the size of the resulting Solr core.
Solr 4 schema setup
You cannot use the schema setup script when using a Solr 4 server. If you really want to use the Solr 4x branch, here are the field types descriptions:
Extracted from search/classes/document.php
Field name | Field type | Stored | Indexed | Query field |
---|---|---|---|---|
id | org.apache.solr.schema.StrField | true | false | false |
itemid | org.apache.solr.schema.TrieIntField | true | true | false |
title | org.apache.solr.schema.TextField | true | true | true |
content | org.apache.solr.schema.TextField | true | true | true |
contextid | org.apache.solr.schema.TrieIntField | true | true | false |
areaid | org.apache.solr.schema.StrField | true | true | false |
type | org.apache.solr.schema.TrieIntField | true | true | false |
courseid | org.apache.solr.schema.TrieIntField | true | true | false |
owneruserid | org.apache.solr.schema.TrieIntField | true | true | false |
modified | org.apache.solr.schema.TrieDateField | true | true | false |
userid | org.apache.solr.schema.TrieIntField | true | true | false |
description1 | org.apache.solr.schema.TextField | true | true | true |
description2 | org.apache.solr.schema.TextField | true | true | true |
solr_filegroupingid | org.apache.solr.schema.StrField | true | true | false |
solr_fileid | org.apache.solr.schema.StrField | true | true | false |
solr_filecontenthash | org.apache.solr.schema.StrField | true | true | false |
solr_fileindexstatus | org.apache.solr.schema.TrieIntField | true | true | false |
solr_filecontent | org.apache.solr.schema.TextField | false | true | true |