Ruby on rails 在rails/Postgres中,使用to_tsquery如何搜索单词中的字符串?
我有一个搜索,工作得很好,但有一种类型的搜索是失踪 因此,我有一个搜索“name”列非常好的方法,但是它与搜索词位于单词中的字符串不匹配: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” 我想
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'