すべてのプロダクト
Search
ドキュメントセンター

PolarDB:全文検索

最終更新日:Dec 06, 2024

全文検索は、大量のテキストデータからクエリされた情報を迅速かつ正確に見つけるように設計された情報検索技術です。 PolarDB for PostgreSQL には、さまざまな全文検索機能があります。

背景情報

キーワードに基づく従来の検索と比較して、フルテキスト検索は、大量のテキストデータからクエリされた情報を迅速かつ正確に見つけるように設計されています。 フルテキスト検索では、特定のフィールドやタグだけでなく、ドキュメント全体のコンテンツを処理できます。

ほとんどの場合、フルテキスト検索には次の手順が含まれます。

  • テキスト前処理: 検索効率と精度を高めるためにテキストを準備します。 このステップには、トークン化、ストップワードの削除、ステミングなどのタスクが含まれます。

  • インデックス構築: 通常は転置インデックス構造を使用して、処理されたテキストにインデックスを構築し、ドキュメント内の各単語の位置を追跡します。

  • クエリ処理: クエリを入力した後にクエリステートメントを分析し、クエリを情報の検索と検索に適した形式に変換します。

  • 結果の並べ替え: 関連性アルゴリズムに基づいて検索結果を並べ替え、要件を最も満たす結果を返します。

シナリオ

全文検索は、さまざまなシナリオに適用できます。

  • ドキュメント管理システム: 内部ドキュメント、レポート、および契約をすばやく見つけることができ、全体的な作業効率が大幅に向上します。

  • オンライン検索エンジン: インターネット上の情報をすばやく見つけるのに役立ちます。

  • 学術研究: 研究者は、学術データベースや文献から関連する文献やデータをすばやく見つけることができます。

  • Eコマース: 顧客が探している製品を簡単に見つけることができ、ショッピング体験が向上します。

  • ソーシャルメディア: キーワードに基づいて投稿、コメント、画像を検索できるため、情報へのアクセスが向上します。

  • 法的文書の検索: 弁護士や法律専門家が関連する事件や法的規定をすばやく見つけるのに役立ちます。

  • 医療記録管理: 病院は医療記録とレポートから患者情報と履歴記録をすばやく見つけることができます。

  • カスタマーサポート: 顧客がオンラインカスタマーサービスシステムでよくある質問 (FAQ) やサポートドキュメントをすばやく見つけるのに役立ちます。

  • コンテンツ管理システム: 訪問者がWebサイトやブログから関連する記事や資料をすばやく見つけるのに役立ちます。

  • 図書館と情報の検索: 読者は図書館で本や記事を簡単に見つけることができます。

機能

トークン化

PolarDB for PostgreSQL の全文検索機能では、ドキュメントを前処理し、その後の検索用にインデックスを保存できます。 テスト前処理には次の手順が含まれます。

  • ドキュメントをさまざまなタイプのトークンに解析します。 トークンは、数字、単語、複雑な単語、および電子メールアドレスを含むことができます。 この区別により、トークンをそれらのタイプに基づいて異なる方法で処理することができます。

  • 単語の形式を標準化することにより、トークンを語彙素に正規化します。 このプロセスには、大文字を小文字に変換し、sやesなどの接尾辞を削除することが含まれます。 これにより、単語のさまざまなバリエーションを単一のエンティティとして扱うことができ、検索の効率と精度が向上します。

  • 検索を容易にする方法で前処理された文書を保存する。 例えば、各文書は、語彙素の順序付けられた配列として表される。 語彙素に加えて、ランク付けのための位置情報も記憶される必要がある。 この情報は、クエリに対するドキュメントの関連性を判断するのに役立ちます。 例えば、「密な」領域内にクエリされた用語を含む文書は、クエリされた用語が散在する文書と比較して上位にランクされる。

tsvector

PolarDB for PostgreSQL のtsvectorデータ型は、効率的な全文検索用に設計されています。 tsvectorデータ型は、処理されたテキストを効率的に保存でき、高速検索とマッチングをサポートします。 tsvectorデータ型は、文書内のそれらの位置と共に、文書の語彙素のソートされたリストを格納する。

pg_bigm

pg_bigm は、PolarDB for PostgreSQL の拡張です。 pg_bigm拡張機能を使用すると、テキストのファジー検索を実行でき、特に類似の文字列を検索する場合に効果的です。 pg_bigm拡張機能は、検索エンジンやコンテンツ管理システムなど、大量のテキストデータを含むアプリケーションに最もよく使用されます。 pg_bigm拡張の主なアイデアは、「nグラム」 (nタプル) を使用してテキスト検索の効率と精度を向上させることです。

説明

pg_bigm拡張機能は、% xxxx % 形式のワイルドカードを使用するなど、ワイルドカードを使用することで、検索の効率を大幅に向上させることができます。

pg_trgm

pg_trgmは、トライグラムをサポートするPolarDB for PostgreSQL の拡張です。 トライグラムは、ストリングから抽出された3つの文字の連続したシーケンスであり、ファジーマッチングおよびテキスト類似性検索に特に有用である。 pg_trgm拡張機能は、インデックスとクエリ演算子を作成することで、大きなテキストデータセットのクエリ効率を向上させます。 pg_trgm拡張機能は、フルテキスト検索、自動補完、スペル修正など、さまざまなシナリオに適しています。

説明

pg_trgm拡張機能は、% xxxx % 形式のワイルドカードを使用するなど、ワイルドカードを使用することで、検索の効率を大幅に向上させることができます。

中国語のテキストセグメンテーション

中国語では、単語は意味のある最小の単位です。 英語のテキストと比較して、中国語のテキストは単語を区切るためにスペースを使用しません。 これにより、PostgreSQLのデフォルトの全文検索エンジンでは、中国語のセマンティクスに従って単語のセグメンテーションを正確に実行することが困難になります。

中国語テキストを効果的に処理するために、PolarDB for PostgreSQL はpg_jiebaおよびzhparser拡張を提供します。

pg_jieba

Jiebaは、中国語の文章の単語を正確に識別してセグメント化できる、広く使用されている中国語のテキストセグメンテーションライブラリです。 pg_jieba拡張は、Jiebaの単語セグメンテーション機能をデータベースに統合して、中国語のテキスト単語の効率的な処理を可能にし、全文検索を強化します。

Zhparser

単純中国語単語セグメンテーション (SCWS) は、単語頻度辞書に基づくオープンソースの中国語単語セグメンテーションエンジンです。 SCWSは、中国語テキストを個々の単語に正確にセグメント化できます。

Zhparser は、SCWSに基づいて開発された中国語の単語セグメンテーション拡張機能です。 Zhparser拡張機能は、PostgreSQLのフルテキスト検索機能と互換性があり、さまざまな機能構成オプションとカスタム辞書を提供します。

インデックス作成

PolarDB for PostgreSQL は、フルテキスト検索機能を強化するためのさまざまなインデックス作成構造を提供します。

GINインデックス作成

一般化転置インデックス (GIN) は、全文検索をサポートするPostgreSQLのインデックスの一種です。 GINインデックスは、大量のテキストデータを処理するのに特に有利である。 GINインデックス作成は、特にtsvectorおよびtsqueryデータ型を使用する複雑なテキストクエリで、迅速なクエリ操作をサポートします。 GINインデックス作成は、JSONBなどのデータ型をサポートします。

RUMインデックス作成

RUM はPostgreSQLの拡張で、フルテキスト検索やその他のインデックス作成要件に対応するRUMインデックス作成タイプを提供します。 RUMインデックス作成は、特に関連性に基づいてドキュメントをランク付けする必要があるシナリオで、フルテキスト検索のパフォーマンスを向上させるように設計されています。

RUMインデックスは、組み込みのGINインデックスと同様の転置インデックスです。 2つのインデックスの主な違いは、RUMインデックスが保存できる追加情報にあります。 追加情報は、ソートまたは他の関連動作の結果へのより速いアクセスを容易にする。 例えば、全文検索において、RUMインデックスは、文書内の用語の位置情報を格納することができる。 このように、位置情報は、クエリ中に関連性ランキングを計算するために使用される。 例えば、全文検索では、RUMインデックスは、文書内の単語の位置を追跡することができる。 この情報は、関連性ランキングをより効率的に計算するためにクエリ中に使用されます。

クエリ処理

tsquery

tsqueryデータ型は、全文検索でテキストデータのクエリを処理するように設計されています。 tsqueryを使用すると、複雑な検索条件を作成して、大量のテキストデータから情報を効率的に見つけることができます。 PolarDB for PostgreSQL には、テキストをtsqueriesに変換するために使用できるto_tsqueryメソッドもあります。 tsvectorデータ型とフルテキスト検索演算子を使用して、フルテキスト検索クエリを実行できます。

tsqueryは、& (and) 、| (OR) 、! などの @ @ (包含) 演算子とブール演算子をサポートしています。 (NOT) 。 これにより、複合条件検索クエリを構築できます。

並べ替え

ts_rank

ts_rankはPostgreSQLの関数で、ドキュメントとクエリの関連性を示すスコアを計算するために全文検索で使用されます。 スコアを使用して、特定の検索条件に対するドキュメントの重要性または関連性を評価できます。