9

PostgreSQL を使用してドキュメントを保存したいと考えています。それらの一部は最大 2 GB になる可能性があるため、大きなオブジェクトに関するドキュメントpg_largeobjectに従って、OID によって参照される別のテーブル ( ) に大きなオブジェクトが格納される lob-Datatype を使用する必要があります。

私たちにとって、これらのドキュメント ( .pdf.doc、...) を検索できることは非常に重要です。組み込みのPostgreSQL 全文検索でテーブルと列を検索できますが、pg_largeobjectテーブル内のラージ オブジェクトも検索できますか?

そうでない場合は、Oracle を使用する必要があります。

4

2 に答える 2

3

ここには少なくとも2つの問題があります。

  1. 全文検索はlob、oid-referencesとして保存された大きなオブジェクトでは実際には機能しません。の内容をフルテキストで索引付けすることはできませんpg_largeobject

  2. 全文検索は、テキストの索引付けシステムです。PDF、Microsoft Wordドキュメント、またはその他のランダムなバイナリファイルのインデックスを作成することはできません。テキスト抽出ツールのコールバックなどは用意されていません。

次のいずれかを実行できます。

  • 外部ツールを使用してこれらのファイルから抽出されたテキストoidと、ファイル自体を参照するを含むテーブルを作成し、抽出されたテキストのテーブルにフルテキストインデックスを作成します。また

  • さまざまな形式に対応したり、独自のテキスト抽出を行ったりするように設計された、Solr ( Luceneに基づく)などのより強力でフル機能の外部検索システムを使用します。

于 2012-10-29T09:24:40.670 に答える
2

PostgreSQL では、全文検索はたいてい 1 つの非常に重要な機能に基づいていますto_tsvector()。この関数は、テキスト ドキュメントをtsvectorデータ型に変換します。通常、tsvector物理的なサイズは元のテキストの約 1% です。

それ以降のすべてのテキスト検索方法は、計算値または物理値の上にインデックスを作成することに基づいていtsvectorます。これを念頭に置いて、必要なtsvector値をどこでも (クライアント上でも!) 計算し、インデックス作成のために特別に作成された列に保存できます。つまり、元のテキストをデータベースに保存するtsvector必要はありません。検索対象のテキストがどのドキュメントに含まれているかを知るだけで十分です (ただし、単一のドキュメント内の場所はわかりません)。tsvectorこれの優れている点は、そのドキュメントのテキスト コンテンツを取得し、保存してインデックスを作成するために必要な計算を行うことができる限り、インデックス付きドキュメントは、Word、Excel、PDF など、何でもかまいません。

の再計算 (特にクライアント側) の小さな欠点の 1 つtsvectorは、元のドキュメントを変更するたびに再計算する必要があることです。

于 2012-10-29T10:14:02.437 に答える