データベースの全文検索機能/制限について?

この記述を明確にします。完全一致の場合、結果が一致するかしないかのどちらかしかないため、結果のランク付けは不要です。部分一致の場合、どちらを上位にランク付けするかをどう決定するのでしょうか?

  1. これが私の検索語です
  2. 検索語は興味深いです
  3. タイトルが長い分、検索語はここでより興味深いです

上記のすべてのタイトルに検索語が含まれているため、問題は結果をどのようにランク付けするかです。現在、この決定には Postgres のランク付け関数に依存しています。

ランク付けの試み は、ドキュメントが特定のクエリに対してどの程度関連性があるかを測定しようとするものです。これにより、一致する結果が多数ある場合、最も関連性の高いものを最初に表示できます。PostgreSQL は、語彙、近接性、構造化情報を考慮する 2 つの事前定義されたランク付け関数を提供しています。つまり、クエリ用語がドキュメントに現れる頻度、ドキュメント内の用語間の距離、および用語が現れるドキュメントの部位の重要性を考慮します。ただし、関連性の概念は曖昧で、非常にアプリケーション固有です。異なるアプリケーションでは、ランク付けのために追加情報(例:ドキュメントの更新日時)を必要とする場合があります。組み込みのランク付け関数は単なる例です。独自のランク付け関数を作成したり、その結果を追加の要因と組み合わせて、特定のニーズに合わせて調整したりすることができます。

Postgres が考慮する要因は多数ありますが、最終的にランク付けは依然としてある程度曖昧であり、フォーラムのコンテンツがどのように構成されているかによってサイトごとに異なります。Discourse における私たちの目標は、世の中のほとんどのフォーラムで機能する良好なデフォルトを提供することです。