我有一个包含大约 150 万条记录的 Postgres 数据库。在我的 Ruby on Rails 应用程序中,我需要搜索该statement_text
字段(可以包含 1 到数百个单词)。
我的问题:我知道我可以使用pgSearch
gem 来创建类似search_all_words
or的范围search_any_words
,但我不确定确保在结果集中只返回完全匹配的记录的最有效方法是什么。
也就是说,如果我搜索“教皇弗朗西斯”,我希望它只找到连续且顺序相同的这两个词(而不是说,“教皇名叫弗朗西斯”)。
到目前为止,我刚刚将 GIN 索引与ILIKE
完全匹配搜索结合起来。但是考虑到 GIN 索引本质上是通过在每条记录中存储单词的确切位置来工作的,难道不应该有一种更有效(非ILIKE
)的方法来确保搜索词与该字段完全匹配吗?