私は約150万レコードのPostgresデータベースを持っています。私のRuby on Railsアプリケーションでは、statement_text
フィールド(1〜数百の単語を含むことができる)を検索する必要があります。Postgresのフルテキスト検索を使用して完全一致を検索する最良の方法は何ですか?
私の問題:私は、私はsearch_all_words
またはsearch_any_words
のようなスコープを作成するためにpgSearch
宝石を使用することができます知っているが、私は結果セットに返され完全一致持つレコードだけを確保するための最も効率的な方法は何か不確かです。
つまり、私が「Pope Francis」を検索すると、連続して同じ順序で(「The pope is Francis」とは反対の)2つの単語しか見つからないようにしたい。
これまでのところ、完全一致検索ではGINインデックスとILIKE
を組み合わせただけです。しかし、GIN指数が本質的にすべてのレコードでstoring the exact position of a wordによって働いているとすれば、検索用語がフィールドと完全に一致することを確実にするより効率的な方法はありませんか?
ありがとう、ドミトリー!私は全文検索を使っているので、ts_rankを使うことができます。しかし問題は、フィールドの語数によっては、ILIKEを使用せずに、単語が隣接して正しい順序で確実に特定されることではありません。私はそれを正しく理解していますか? – jayp
いいえ、長さに基づいてカットオフはありません。フレーズに一致するものがある場合、それはまだ高いランクを持ちます。 ts_rankの正規化係数を省略することもできます。正常に動作するはずです。 –
OK、ありがとうございます! – jayp