2016-05-16 11 views
0

PostgreSQLをリレーショナルデータストレージとして使用するWebアプリケーションで全文検索を行うには、次のような戦略があります。例えば、私はInvoicesテーブルを取るでしょう。私は、フルテキスト検索クエリが、私は上のtsvフィールドを更新する更新トリガーを設定しているすべてのフルテキスト検索テーブルの上にこの... WHERE tsv @@ to_tsquery('query:*') ...リレーショナルデータの変更時にPostgreSQL全文検索フィールドを更新するには

  • のように行われた上で一つの追加フィールドALTER TABLE invoices ADD COLUMN tsv tsvectorを持つテーブルで

    1. レコードのすべての変更。更新は、さまざまなフィールドのデータを設定し、tsvフィールドに連結し、右の重みなどを設定します。

    2. tsvフィールドに設定されるデータは、他のテーブルのリレーショナルデータでもあります。例からテーブルinvoicesに私がclient_idフィールドを持っていますが、私も私もinvoices.tsvフィールドのclients.client_nameデータ

    を含め、クライアント名で請求書を検索したいので、私の質問は、関係を維持するための最善の戦略は何かということですtsvセレクタのデータを同期させます。上記のシナリオでは - >クライアント名が変更された場合は、私はtsvフィールドを更新する必要があります。

    毎晩このような設定が必要ですか?それはトリガーでも行うことができますが、私のデータベーススキーマが非常に大きいので、私はトリガーを全面的に持っているとコントロールが崩れてしまう恐れがあります。

  • 答えて

    1

    クライアント名をtsvフィールドに追加すると、より複雑になります。 this articleに記載されているように、マテリアライズド・ビューを調べるとよいでしょう。トレードオフは、結果を表示する速度が速く、ビューを定期的にリフレッシュする必要があります。 Postgres 9.4では、同時にビューを更新することができます。

    もう1つのことは、クライアントテーブルに更新トリガを作成することです。更新があると、Invoicesテーブルのデータも更新されます。

    関連する問題