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

Search results should prioritize first post in topic when title matches search term からの議論を継続します:

これは元の議論からは完全に脱線していますが、単に驚くべきことなのか、それとも心底唖然とするべきことなのか判断に迷います:

(強調は私が付けたものです)

データベースの選定については、私には経験が全くないため異議を唱えるつもりはありませんが、この記述は Postgres が内部的にこれらのケースを区別していないことを示唆しています。このような制限はデータベースのテキスト検索エンジンにおいて一般的なのでしょうか?もしそうなら、それが多くのサイト検索機能が完全に機能不全に陥っている理由を大いに説明することになるでしょう。

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

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

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

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

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

「いいね!」 5

ああ…なるほど、おそらく私の側の誤解ですね。データベースが「完全一致」と「部分一致」を区別できない、とおっしゃったのだと私は思っていました。

トピックのタイトルにおける一致の優先順位付けという、当初議論していた文脈において:

  • 実際には、私の意図するところでは、あなたの挙げられた3つの例はすべて「完全一致」と呼びます。
  • termというSearchという語句があります」という場合は「部分一致」となります。

  • あなたの3つの例は、ランキングにおいて同等です。見つかった順にリストアップしてください。
  • 私の例はそれらより下位にランクされます。
  • ただし、それらすべては、タイトルを含まない投稿の内容のみが一致・関連している場合の投稿よりも、先にランクされます。

もし上位の検索結果が「タイトル」一致で埋め尽くされることを懸念されているなら、検索語が一定の複雑さのレベルに達した場合にのみタイトル検索を使用してください。検索結果の最上位には、最大で4〜5件の「タイトル」一致が表示されることを目標とします。(ただし、それを判断するのはおそらく難しいでしょうが)