The
CirrusSearch
extension implements searching for MediaWiki using
Elasticsearch
.
Elasticsearch is a standalone third-party software you must install as a requirement for this extension.
It is a database system that provides search and indexing functionality, where the current text of your wiki pages gets indexed for faster and improved search results.
The communication between MediaWiki and ElasticSearch is done through web services.
See also the
help page on using
this extension.
Goals
- No native dependencies that would make this difficult to install
- The only dependencies are pure-PHP MediaWiki extensions and Elasticsearch itself
- Provide a near-real-time search index for wiki pages that's extendable by other MediaWiki extensions
- Provide all of the query options
MWSearch
has given users, and more
Dependencies
- PHP and cURL
- Elasticsearch
Every version of ElasticSearch change how web services work, and cause compatibility problems.
You must install the version of Elastic Search compatible with the version of MediaWiki you are currently using:
- MediaWiki 1.29.x - 1.30.x require Elasticsearch 5.3.x - 5.4.x.
- MediaWiki 1.31.x - 1.32.x require Elasticsearch 5.5.x - 5.6.x.
- MediaWiki 1.33.x - 1.38.x require Elasticsearch 6.5.x - 6.8.x. (6.8.23+ recommended)
- MediaWiki 1.39+ require Elasticsearch 7.10.2 (6.8.23+ is possible using a
compatibility layer
)
Take note that a Java installation like
OpenJDK
is needed in addition.
It's best to use the official Elasticsearch Docker image or a self-hosted version.
A managed product like Amazon OpenSearch (formerly Amazon Elasticsearch) can work but may require additional configuration depending on its specifics.
For example, Amazon OpenSearch only listens for Elasticsearch API requests over HTTPS on port 443 (i.e. it does not expose the default Elasticsearch port 9200), so a TLS-enabled proxy (e.g. Nginx) can enable CirrusSearch to communicate with an Amazon OpenSearch cluster.
- Elastica
- Elastica is a PHP library to talk to Elasticsearch. Install Elastica per the
instructions below
.
- Other
- Due to the actual handling of jobs by the CirrusSearch extension, it is advisable to
set up jobs in Redis
to prevent messages like
Notice: unserialize(): Error at offset 64870 of 65535 bytes in JobQueueDB.php
and subsequent errors like
Unsupported operand types
. See
task T157759
.
Installation
Even though the instructions below tell you to only run Composer when installing from git, it may be necessary to issue it anyway in order to install all PHP dependencies.
- Download
and move the extracted
Elastica
folder to your
extensions/
directory.
Developers and code contributors should install the extension
from Git
instead, using:
cd extensions/
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/Elastica
- Only when installing from Git, run
Composer
to install PHP dependencies, by issuing
composer install --no-dev
in the extension directory.
(See
task T173141
for potential complications.)
- Add the following code at the bottom of your
LocalSettings.php
file:
wfLoadExtension
(
'Elastica'
);
-
Done
? Navigate to
Special:Version
on your wiki to verify that the extension is successfully installed.
CirrusSearch
- Download
and move the extracted
CirrusSearch
folder to your
extensions/
directory.
Developers and code contributors should install the extension
from Git
instead, using:
cd extensions/
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/CirrusSearch
- Only when installing from Git, run
Composer
to install PHP dependencies, by issuing
composer install --no-dev
in the extension directory.
(See
task T173141
for potential complications.)
- Add the following code at the bottom of your
LocalSettings.php
file:
wfLoadExtension
(
'CirrusSearch'
);
- Now follow the setup instructions in the CirrusSearch
README
delivered with your extension i.e.
$IP
/
extensions
/
CirrusSearch
/
README
. Note that all info in it might not apply to your version of the extension, especially the version of
Elasticsearch
supported.
- Configure as required.
-
Done
? Navigate to
Special:Version
on your wiki to verify that the extension is successfully installed.
Enable regex queries
This is an optional step. You will need to install the
search-extra plugin
for this. Do so by following these steps:
- execute the following command:
/usr/share/elasticsearch/bin/elasticsearch-plugin/elasticsearch-plugin
install
org.wikimedia.search:extra:7.10.2-wmf12
- add the following line to you "LocalSettings.php" file:
$wgCirrusSearchWikimediaExtraPlugin
[
'regex'
]
=
[
'build'
,
'use'
,
'max_inspect'
=>
10000
];
- restart Elasticsearch with the follwing command:
systemctl
restart
elasticsearch
- recreate the search index by executing the following commands:
php
path/to/extensions/CirrusSearch/maintenance/UpdateSearchIndexConfig.php
--startOver
php
path/to/extensions/CirrusSearch/maintenance/ForceSearchIndex.php
Upgrading
Please follow the upgrade instructions in the CirrusSearch
UPGRADE
file.
Configuration
The configuration parameters of CirrusSearch are documented at the
"settings.txt"
file.
See also documentation on
CirrusSearch configuration profiles
.
Elasticsearch will fail to index for CirrusSearch if one uses a database name for MySQL containing a capital character, e.g., "MyWikiDatabaseName." To mitigate this, CirrusSearch provides the
$wgCirrusSearchIndexBaseName
configuration parameter, which one needs to set, e.g.,
$wgCirrusSearchIndexBaseName
=
'mywikidatabasename'
;
.
Hooks
CirrusSearch extension defines a number of hooks that other extensions can make use of to extend the core schema and modify documents.
The following hooks are available:
API
CirrusSearch features can be used in API queries.
Searching happens via the normal
search API
,
action=query&list=search
; you can use CirrusSearch-specific features, such as the
morelike:
special prefix to find pages related to
Marie Curie
and
radium
:
api.php?action=query&list=search&srsearch=morelike:Marie_Curie%7Cradium&srlimit=10&srprop=size&formatversion=2
Custom APIs and parameters are provided for querying CirrusSearch configuration and debug information:
See also
- General links
- Debugging
Local development
Elastic Search service can be run with the Vagrant role (
cirrussearch
) and MediaWiki Vagrant.
For Docker, you can use a command like
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:6.8.2
.
Then follow the installation and configuration directions.
If your web host is in a container you'll want to make sure the above container is on the same network, and in LocalSettings.php you will want to reference
elasticsearch
as the host name.
This will not have the WMF plugins but can be sufficient for basic testing.
| This extension is being used on one or more
Wikimedia projects
. This probably means that the extension is stable and works well enough to be used by such high-traffic websites. Look for this extension's name in Wikimedia's
CommonSettings.php
and
InitialiseSettings.php
configuration files to see where it's installed. A full list of the extensions installed on a particular wiki can be seen on the wiki's
Special:Version
page.
|
| This extension is included in the following wiki farms/hosts and/or packages:
This is not an authoritative list.
Some wiki farms/hosts and/or packages may contain this extension even if they are not listed here.
Always check with your wiki farms/hosts or bundle to confirm.
|