mirror of
https://github.com/zulip/zulip.git
synced 2025-10-28 18:43:52 +00:00
This adds support for using PGroonga to back the Zulip full-text search feature. Because built-in PostgreSQL full text search doesn't support languages that don't put space between terms such as Japanese, Chinese and so on. PGroonga supports all languages including Japanese and Chinese. Developers will need to re-provision when rebasing past this patch for the tests to pass, since provision is what installs the PGroonga package and extension. PGroonga is enabled by default in development but not in production; the hope is that after the PGroonga support is tested further, we can enable it by default. Fixes #615. [docs and tests tweaked by tabbott]
46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
# -*- coding: utf-8 -*-
|
|
from __future__ import unicode_literals
|
|
|
|
from django.db import models, migrations
|
|
from django.contrib.postgres import operations
|
|
from django.conf import settings
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
dependencies = [
|
|
('zerver', '0001_initial'),
|
|
]
|
|
|
|
database_setting = settings.DATABASES["default"]
|
|
if "postgres" in database_setting["ENGINE"]:
|
|
operations = [
|
|
migrations.RunSQL("""
|
|
ALTER ROLE %(USER)s SET search_path TO %(SCHEMA)s,public,pgroonga,pg_catalog;
|
|
|
|
SET search_path = %(SCHEMA)s,public,pgroonga,pg_catalog;
|
|
|
|
ALTER TABLE zerver_message ADD COLUMN search_pgroonga text;
|
|
|
|
UPDATE zerver_message SET search_pgroonga = subject || ' ' || rendered_content;
|
|
|
|
-- TODO: We want to use CREATE INDEX CONCURRENTLY but it can't be used in
|
|
-- transaction. Django uses transaction implicitly.
|
|
-- Django 1.10 may solve the problem.
|
|
CREATE INDEX zerver_message_search_pgroonga ON zerver_message
|
|
USING pgroonga(search_pgroonga pgroonga.text_full_text_search_ops);
|
|
""" % database_setting,
|
|
"""
|
|
SET search_path = %(SCHEMA)s,public,pgroonga,pg_catalog;
|
|
|
|
DROP INDEX zerver_message_search_pgroonga;
|
|
ALTER TABLE zerver_message DROP COLUMN search_pgroonga;
|
|
|
|
SET search_path = %(SCHEMA)s,public;
|
|
|
|
ALTER ROLE %(USER)s SET search_path TO %(SCHEMA)s,public;
|
|
""" % database_setting),
|
|
]
|
|
else:
|
|
operations = []
|