【问题标题】:Not quite multiple model search - PG不完全多模型搜索 - PG
【发布时间】:2014-10-23 13:50:36
【问题描述】:

:user has_many :books 等

我想实现一个与书籍或用户匹配的搜索,但由于书籍和用户之间的关系如此密切,它不像是多类搜索。

基本上我想针对 - 执行全文搜索 -

book.title
book.description
book.user.username
book.user.aboutuser

...并返回排名书对象。目前我正在玩textacular。我认为这不是真正的多类搜索是否正确?谁能指出一个很好的资源来了解如何进行查询?

【问题讨论】:

  • 这是我刚刚从thoughtbot 那里读到的一个很好的资源:@​​987654321@

标签: ruby-on-rails postgresql search


【解决方案1】:

我会在这里使用sunspot - 它使用 Sorl,相当不错的搜索引擎。

在您的 gemfile 中:

gem 'sunspot_rails'
gem 'sunspot_solr' # optional pre-packaged Solr distribution for use in development

在需要的bundle之后,你可以创建配置并启动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 应用服务器上。

【讨论】:

  • 谢谢你,真的很有帮助。
  • 我已经全部启动并运行,但搜索返回一个不同的对象 - #<:search::standardsearch:0x007f7f608b42f0> 而不是我的书对象 - 可能非常简单但知道它可能是什么吗?如果它很复杂,我会把它放在另一个问题上:)
  • 您需要在上面调用results - 这将为您提供 AR 对象的数组(或 will_paginated-array):)
  • 顺便说一句:你可能想看看太阳黑子的文档。它有很多有用的选项(例如提升一个字段,对结果进行分组)。而且速度真的很快。
  • 当我开始保存新对象时,我意识到原始代码示例不太正确,因此我将其更新为适合我的。排名部分我还没有整理出来,所以注释掉了。
【解决方案2】:

这取决于您的问题有多“大”,数亿或数百万条记录?后者最常见的搜索引擎是 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?)。

【讨论】:

  • 我看过 texticle 和 textacular - 没看过 pg_search - 我会看看,谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-08-09
  • 1970-01-01
  • 2013-08-04
  • 1970-01-01
  • 1970-01-01
  • 2019-09-22
  • 2015-10-18
  • 1970-01-01
相关资源
最近更新 更多