mirror of https://github.com/zulip/zulip.git
104 lines
3.1 KiB
Markdown
104 lines
3.1 KiB
Markdown
# Full-text search
|
|
|
|
Zulip supports full-text search, which can be combined arbitrarily
|
|
with Zulip's full suite of narrowing operators. By default, it only
|
|
supports English text, but there is an experimental
|
|
[PGroonga](https://pgroonga.github.io/) integration that provides
|
|
full-text search for all languages.
|
|
|
|
The user interface and feature set for Zulip's full-text search is
|
|
documented in the in-app "Search filters" reference which can be
|
|
accessed from the Zulip app's gear menu.
|
|
|
|
## The default full-text search implementation
|
|
|
|
Zulip uses [PostgreSQL's built-in full-text search
|
|
feature](https://www.postgresql.org/docs/current/textsearch.html),
|
|
with a custom set of English stop words to improve the quality of the
|
|
search results.
|
|
|
|
In order to optimize the performance of delivering messages, the
|
|
full-text search index is updated for newly sent messages in the
|
|
background, after the message has been delivered. This background
|
|
updating is done by
|
|
`puppet/zulip/files/postgresql/process_fts_updates`, which is usually
|
|
deployed on the database server, but could be deployed on an
|
|
application server instead.
|
|
|
|
## Multi-language full-text search
|
|
|
|
Zulip also supports using [PGroonga](https://pgroonga.github.io/) for
|
|
full-text search. While PostgreSQL's built-in full-text search feature
|
|
supports only one language at a time (in Zulip's case, English), the
|
|
PGroonga full-text search engine supports all languages
|
|
simultaneously, including Japanese and Chinese. Once we have tested
|
|
this new backend sufficiently, we expect to switch Zulip deployments
|
|
to always use PGroonga.
|
|
|
|
### Enabling PGroonga
|
|
|
|
All steps in this section should be run as the `root` user; on most installs, this can be done by running `sudo -i`.
|
|
|
|
1. Alter the deployment setting:
|
|
|
|
```bash
|
|
crudini --set /etc/zulip/zulip.conf machine pgroonga enabled
|
|
```
|
|
|
|
1. Update the deployment to respect that new setting:
|
|
|
|
```bash
|
|
/home/zulip/deployments/current/scripts/zulip-puppet-apply
|
|
```
|
|
|
|
1. Edit `/etc/zulip/settings.py`, to add:
|
|
|
|
```python
|
|
USING_PGROONGA = True
|
|
```
|
|
|
|
1. Apply the PGroonga migrations:
|
|
|
|
```bash
|
|
su zulip -c '/home/zulip/deployments/current/manage.py migrate pgroonga'
|
|
```
|
|
|
|
Note that the migration may take a long time, and users will be
|
|
unable to send new messages until the migration finishes.
|
|
|
|
1. Once the migrations are complete, restart Zulip:
|
|
|
|
```bash
|
|
su zulip -c '/home/zulip/deployments/current/scripts/restart-server'
|
|
```
|
|
|
|
### Disabling PGroonga
|
|
|
|
1. Remove the PGroonga migration:
|
|
|
|
```bash
|
|
su zulip -c '/home/zulip/deployments/current/manage.py migrate pgroonga zero'
|
|
```
|
|
|
|
If you intend to re-enable PGroonga later, you can skip this step,
|
|
at the cost of your Message table being slightly larger than it would
|
|
be otherwise.
|
|
|
|
1. Edit `/etc/zulip/settings.py`, editing the line containing `USING_PGROONGA` to read:
|
|
|
|
```python
|
|
USING_PGROONGA = False
|
|
```
|
|
|
|
1. Restart Zulip:
|
|
|
|
```bash
|
|
su zulip -c '/home/zulip/deployments/current/scripts/restart-server'
|
|
```
|
|
|
|
1. Finally, remove the deployment setting:
|
|
|
|
```bash
|
|
crudini --del /etc/zulip/zulip.conf machine pgroonga
|
|
```
|