我刚刚从 MySQL 迁移到 Postgres 9.0.3。我有一个全新的应用程序,其中包含一些数据(游戏数据)。
无论如何,我似乎无法搜索到部分单词。这是我的搜索方法:

def self.search(query)
  conditions = <<-EOS
    to_tsvector('english', title) @@ plainto_tsquery('english', ?)
  EOS

  find(:all, :conditions => [conditions, query])
end
我确定我需要一个通配符,但我只是在学习 Postgres。
当我搜索 Shinobi 时,我得到了正确的结果:

但是当我搜索 Shin 时我什么也没得到?
感谢您提供任何线索。

最佳答案

我认为要允许前缀匹配,您需要使用 to_tsquery 而不是 plainto_tsquery

那是说 http://www.postgresql.org/docs/current/static/textsearch-controls.html#TEXTSEARCH-PARSING-QUERIES

所以你的代码可能是这样的

def self.search(query)
  conditions = <<-EOS
    to_tsvector('english', title) @@ to_tsquery('english', ?)
  EOS

  find(:all, :conditions => [conditions, query + ':*'])
end

关于ruby-on-rails-3 - Postgres 全文与 Rails 3 中的部分单词不匹配?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5086325/

10-12 04:01