中国語のPostgresまたはPostgresで中国語の全文検索を設定する

画像

クライアントから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 TEXT SEARCH CONFIGURATION testzhcfg (PARSER = zhparser); test_dbname=# ALTER TEXT SEARCH CONFIGURATION testzhcfg ADD MAPPING FOR n,v,a,i,e,l WITH simple; 

すでにデータのあるテーブルがあるとします。
 CREATE TABLE messages ( title text, body text ); 

そして、タイトルと本文の列を検索する必要があります。 そのような記録がありますように
 INSERT INTO messages VALUES('批发新', '款新婴幼'); 

これを行うには、トークンのtsvectorタイプのtsv列を追加する必要があります。
 test_dbname=# ALTER TABLE messages ADD COLUMN tsv tsvector; 

ジンインデックス(https://ru.wikipedia.org/wiki/GIN)
 test_dbname=# CREATE INDEX tsv_idx ON messages USING gin(tsv); 

ここで、以前に作成したpublic.testzhcfg構成を使用して、tsv列のトークンを自動的に更新するトリガーを作成します。
 test_dbname=# CREATE TRIGGER tsvectorupdate BEFORE INSERT OR UPDATE ON messages FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger( tsv, 'public.testzhcfg', title, body ); 

そして最後のステップ。
新しいトリガーでtsv列を更新する必要があります。 (また、挿入および更新時にアクティブになる)、このために、UPDATEを使用して、タイトルフィールドと本文フィールドの現在の値を同じ値に書き換えます。
 test_dbname=# UPDATE messages SET title=title, body=body; 

試すことができます
SELECTタイトル、本文FROMメッセージWHERE tsv @@ to_tsquery( '批&規約');

質問、提案、提案はコメントに記入してください。
ご清聴ありがとうございました!

Source: https://habr.com/ru/post/J301820/


All Articles