10

我目前正在使用Act_as_taggable_on进行标记,并使用pg_search在我的 Rails 3 应用程序上搜索我的 postgresql 数据库。

如何使用 pg_search 搜索 act_as_taggable_on gem 生成的标签?我可以通过说“Post.find(1).tag_list”来查看 Post 的标签,但是 Post 表中没有“tag”列,所以当我运行

 pg_search_scope :search_by_weight, :against => {:tag_list => 'A', :title => 'B', :content => 'C'} #,:using => [:tsearch => {:prefix => true}] #:trigram, :dmetaphone]

它给了我一个错误,因为 Post 表中不存在 Post.tag_list 列。当您可以通过点连接器(即mission.tag_list)找到值但表中不存在时,它叫什么?我不知道该输入什么。所以基本上,我如何将不存在的列作为参数传递?

另外,你可能已经注意到我注释掉了

 :using => [:tsearch => {:prefix => true}] #:trigram, :dmetaphone]

多于。我似乎找不到如何为 Postgresql 安装额外的模块。在哪里输入 CREATE EXTENSION?(使用 ubuntu 11.10 和 postgresql 9.1.3 -> 和 heroku 进行生产)

4

3 回答 3

9

一个更简单的方法是使用关联并通过 pg_search 进行搜索,如下所示:

class Item < ActiveRecord::Base
 include PgSearch  

  pg_search_scope :full_search, 
    :against => {  
    :item_status => 'A',
    :title => 'B',
    :description => 'C'    
   },       
    :associated_against => {
    :tags => [:name]    
   }
end 

我刚刚在我的一个项目中实现了这一点,并且效果很好(通过标签名称搜索)。不幸的是,我无法弄清楚如何加权关联关系,因为它说在 Items 表中找不到“标签”列。

于 2012-05-24T21:16:49.550 回答
3

这对我来说也可以使标签加权

    pg_search_scope :search_by_weight, 
      :against => {  
      :title => 'B',
      :content => 'C'    
    },       
    :associated_against => {
      :tags => { :name => 'A' }    
    },
    using: {tsearch: {dictionary: "english"}}
于 2014-08-30T03:03:40.130 回答
1

几年前我在 plpgsql 中编写了我的实现。请参阅我的博客: http: //omarqureshi.net/articles/2010-12-25-tsearch2-for-rails-applications,其中介绍了如何使其工作。

于 2012-05-19T17:09:10.673 回答