
クライアントからPostgreSQLを最新バージョンに更新すると同時に、中国語を教えるようにというリクエストがありました。
より正確には、中国語で全文検索のプロセスを最適化するために、全体が容赦なく遅くなったためです。
以下は、これをどのように行ったかを説明しています。
すぐにビジネスに取りかかりましょう。
最初にすることは、Simple Chinese Word Segmentation(SCWS)とzhparser拡張機能自体をビルドしてインストールすることです
SCWS
wget -q -O - http://www.xunsearch.com/scws/down/scws-1.2.2.tar.bz2 | tar xf - cd scws-1.2.2 ; ./configure ; make install
今zhparser
github.com/amutu/zhparser-同時に本格的な指示があり、それを行います。
git clone https://github.com/amutu/zhparser.git SCWS_HOME=/usr/local make && make install
成功した場合は、目的のデータベースで拡張機能を有効にします
psql -U postgres -d test_dbname -c 'CREATE EXTENSION zhparser'
次に、目的のデータベースに移動して構成を作成します
test_dbname=
すでにデータのあるテーブルがあるとします。
CREATE TABLE messages ( title text, body text );
そして、タイトルと本文の列を検索する必要があります。 そのような記録がありますように
INSERT INTO messages VALUES('批发新', '款新婴幼');
これを行うには、トークンのtsvectorタイプのtsv列を追加する必要があります。
test_dbname=
ジンインデックス(https://ru.wikipedia.org/wiki/GIN)
test_dbname=
ここで、以前に作成したpublic.testzhcfg構成を使用して、tsv列のトークンを自動的に更新するトリガーを作成します。
test_dbname=
そして最後のステップ。
新しいトリガーでtsv列を更新する必要があります。 (また、挿入および更新時にアクティブになる)、このために、UPDATEを使用して、タイトルフィールドと本文フィールドの現在の値を同じ値に書き換えます。
test_dbname=
試すことができます
SELECTタイトル、本文FROMメッセージWHERE tsv @@ to_tsquery( '批&規約');
質問、提案、提案はコメントに記入してください。
ご清聴ありがとうございました!