約 150 万レコードの Postgres データベースがあります。私の Ruby on Rails アプリでは、statement_text
フィールド (1 から数百の単語を含む可能性があります) を検索する必要があります。
私の問題: pgSearch
gem を使用してsearch_all_words
やのようなスコープを作成できることはわかっていますが、正確に一致するレコードのみが結果セットに返されるsearch_any_words
ようにする最も効率的な方法が何であるかはわかりません。
つまり、"Pope Francis" を検索する場合、これらの 2 つの単語が連続していて同じ順序である場合にのみ検索する必要があります (たとえば、"教皇の名前は Francis" ではありません)。
これまでのところ、GIN インデックスとILIKE
完全一致検索を組み合わせただけです。しかし、GIN インデックスが基本的にすべてのレコード内の単語の正確な位置を格納することILIKE
によって機能することを考えると、検索語がフィールドと完全に一致することを保証するより効率的な (非) 方法があるはずではありませんか?