3

私は次のことをしました:

ALTER TABLE blog_entry ADD COLUMN body_tsv tsvector;

CREATE TRIGGER tsvectorupdate BEFORE INSERT OR UPDATE ON blog_entry 
    FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger(body_tsv, 'pg_catalog.english', body);

CREATE INDEX blog_entry_tsv ON blog_entry USING gin(body_tsv);

UPDATE blog_entry SET body_tsv=to_tsvector(body);

現在、これは機能しています。

SELECT title FROM blog_entry WHERE body_tsv @@ plainto_tsquery('hello world');

しかし、英語以外のテキストを検索しようとすると、まったく機能しません(結果がありません)。

私はv9.2.2を使用しています

助けてください。

4

2 に答える 2

9

これで遊んでからしばらく経ちましたが、ts_queryではなく正しい言語でts_vectorを作成する必要があります。

したがって、テーブルを更新するときは、次を使用します。

UPDATE blog_entry SET body_tsv=to_tsvector('german', body);

また、機能を拡張し、ispell辞書を使用して、ステミングをテキスト検索エンジンに適したものにすることもできます(ただし、Solrなどほど高度ではありません)。

これを行うには、 OpenOfficeドイツ語辞書に含まれているISPELL辞書をダウンロードします。

.oxtファイルは実際には.zipファイルであるため、その内容を簡単に抽出できます。

次に、拡張子をに変更しながら、ファイルde_DE_frami.dicをPostgreSQLの「share / tsearch_data」ディレクトリにコピーします.dict(これはPostgreSQLが期待するものです。

de_DE_frami.aff次に、ファイルを同じディレクトリにコピーし、拡張子を。に変更し.affixます。

PostgreSQLで動作させるには、両方の(テキスト)ファイルをUTF-8に変換する必要があります

次に、以下を使用してその辞書を登録します。

CREATE TEXT SEARCH CONFIGURATION de_config (copy=german);

CREATE TEXT SEARCH DICTIONARY german_stem (
    TEMPLATE = snowball,
    Language = german
);

CREATE TEXT SEARCH DICTIONARY german_ispell (
    TEMPLATE = ispell,
    dictfile = de_DE_frami,
    afffile = de_de_frami
);

alter text search configuration de_config 
     alter mapping for asciiword WITH german_ispell, german_stem;

それが完了したら、次を使用してts_vectorを作成できます。

UPDATE blog_entry SET body_tsv=to_tsvector('de_config', body);

これは、マニュアルにも記載されています:http ://www.postgresql.org/docs/current/static/textsearch-dictionaries.html#TEXTSEARCH-ISPELL-DICTIONARY

于 2013-01-13T08:48:04.903 に答える
0

この質問にはしばらく時間がかかりましたが、FTS言語の変更について探していたところ、別の解決策が見つかりました。(そして辞書をダウンロードするよりも良い)

Postgres CLIでは、次のコマンドを使用してテキスト検索構成のリストを取得できます。\dF

  • 現在の構成を確認してください。

show default_text_search_config;

  • テキスト検索構成を別の言語に変更します。

set default_text_search_config = 'pg_catalog.[language]';

于 2019-05-13T17:43:57.210 に答える