Solr返回类型的对象

时间:2014-12-16 17:59:03

标签: ruby-on-rails ruby-on-rails-4 solr sunspot-rails sunspot-solr

我正在使用solr进行搜索。

在我的模型客户端中:

searchable do text :name end

和控制器客户端:

def index
   @search = Client.search do
     fulltext params[:search]
   end
   @clients =  @search.results
end

在控制台中:

cli = Client.search

=> <Sunspot::Search:{:fq=>["type:Client"], :start=>0, :rows=>30, :q=>"*:*"}> 

如何获取对象类型(客户端)?

cli = cli.fq (undefined method `fq' for #<Sunspot::Search::StandardSearch:0xd22ab0c>)
cli = cli.type (undefined method `type' for #<Sunspot::Search::StandardSearch:0xd22ab0c>)

2 个答案:

答案 0 :(得分:0)

我曾经需要这一次但没有找到解决办法。

我找到了一个有效的解决方法,但我不知道这是否是最正确的方法:

cli = Client.search
cli.hits.first.class_name
=> "Client"

答案 1 :(得分:0)

这不是Sunspot的常规用例,所以解决方案并不简单。

通过一些解决方法,您可以获得所搜索的所有类型的类,如下所示:

cli = Sunspot.new_search(Client)

cli.query.to_params.fetch(:fq, [])
  .first[/[^:]+\z/].gsub(/[()]|OR/, '')
  .split.map(&:constantize)

这不会触发实际的Solr搜索。