Ruby on rails 在rails/Postgres中,使用to_tsquery如何搜索单词中的字符串?

Ruby on rails 在rails/Postgres中,使用to_tsquery如何搜索单词中的字符串?,ruby-on-rails,postgresql,search,full-text-search,where,Ruby On Rails,Postgresql,Search,Full Text Search,Where,我有一个搜索,工作得很好,但有一种类型的搜索是失踪 因此,我有一个搜索“name”列非常好的方法,但是它与搜索词位于单词中的字符串不匹配: def self.search(query) query.gsub!(/[^a-z0-9\@\.\+]/i, ' ') where("(to_tsvector('english', name) @@ to_tsquery(?))", query.gsub(' ', '\\\\ ') + ':*') end 例如: 假设用户搜索“mpaign” 我想

我有一个搜索,工作得很好,但有一种类型的搜索是失踪

因此,我有一个搜索“name”列非常好的方法,但是它与搜索词位于单词中的字符串不匹配:

def self.search(query)
  query.gsub!(/[^a-z0-9\@\.\+]/i, ' ')
  where("(to_tsvector('english', name) @@ to_tsquery(?))", query.gsub(' ', '\\\\ ') + ':*')
end
例如:

假设用户搜索“mpaign”

我想返回带有“活动”的标题,因为其中出现了“mpaign”,但这并没有发生

我该如何在这样的单词中进行搜索


谢谢。

Postgres文本搜索可以匹配完整的单词,如campaign,也可以匹配单词前缀,如camp:*,用于campaign,但不能匹配内部单词或其结尾

您可以将tsvector中的所有内容反转为_tsvectorreversename,并执行前缀搜索,例如为campaign反转'mpaign'| |':*'

否则,您应该将LIKE运算符与%通配符一起使用,最好使用

where name LIKE '%mpaign'