:用户has_many:书籍等。
我希望实现一个与书籍或用户相匹配的搜索,但由于书籍和用户密切相关,因此不太喜欢多类搜索。
基本上我想对 -
执行全文搜索book.title
book.description
book.user.username
book.user.aboutuser
...并返回排名的图书对象。目前我正在玩文字。我是否正确地认为这不是真正的多类搜索?任何人都可以指出一个很好的资源来讨论如何进行查询吗?
答案 0 :(得分:1)
我会在这里使用sunspot - 它使用Sorl,非常好的搜索引擎。
在你的gemfile中:
gem 'sunspot_rails'
gem 'sunspot_solr' # optional pre-packaged Solr distribution for use in development
在必需的捆绑后,您可以创建配置并启动solr deamon:
rails generate sunspot_rails:install
bundle exec rake sunspot:solr:start
在你的模特中:
searchable do
integer :rank
text :title, :descritpion
text :aboutuser do
users.map { |user| user.aboutuser }
end
text :username do
users.map { |user| user.username }
end
end
用法:
books = Book.search do
fulltext 'my text'
order_by :rank, :desc
end
只有减号是您需要在生产服务器上启动它 - 不应该使用rake sunspot:solr:start
来完成。相反,你应该在(可能)Tomcat或其他Java应用服务器上正确部署。
答案 1 :(得分:1)
这取决于"大"是你的问题,数百或数百万条记录?后者最常见的搜索引擎是Solr或Sphinx(这里比较讨论的比较:Choosing a stand-alone full-text search server: Sphinx or SOLR?),它们都支持Rails。我亲自使用过Sphinx,但如果你没有大量记录,请尝试pg_search
gem(另见本讨论:Any reason not use PostgreSQL's built-in full text search on Heroku?)。