使用sunspot检索所有文档给出一个布尔范围

时间:2013-01-11 20:29:42

标签: solr scope boolean sunspot

这应该很简单,但我无法让它发挥作用。

我想检索所有已发布的产品。

以下代码正常运行,仅返回已发布的产品:

@products = Product.search do
  with(:published, true)
  with(:facet_tag).all_of(facets) unless facets.nil?
  fulltext q do
  end
  facet :facet_tag
  paginate :page => 1, :per_page => 8
end

当我删除全文部分时,它根本不会返回任何结果。

我希望以下代码返回所有已发布的产品,但代码根本不会返回任何结果。 @ products.results变为零。

@products = Product.search do
  with(:published, true)
  with(:facet_tag).all_of(facets) unless facets.nil?
  facet :facet_tag
  paginate :page => 1, :per_page => 8
end

如何从太阳黑子中获取所有已发布的产品?

1 个答案:

答案 0 :(得分:0)

问题中提供的代码正在运行。问题产生于我对solrconfig文件所做的更改。我添加了一个requestHandler,我称之为edismax。我假设太阳黑子正在使用它,因为它被设置为默认请求处理程序并且全文搜索正在运行。

Sunspot正在期待一个名为dismax的请求处理程序,因为没有配置这样的请求处理程序,因为Solr不理解搜索查询,所以它无法检索所有文档。

实际上这应该不是问题,因为Sunspot旨在成为Solr的完全抽象,并且不需要对solr配置文件进行任何更改。太阳黑子尚不存在,当涉及到更高级的Solr使用时,通常需要进行更改。幸运的是,可以使用adjust_solr_params函数更改solr参数。

我通过将代码更改为:

来解决问题
@products = Product.search do   
  with(:published, true)
  with(:facet_tag).all_of(facets) unless facets.nil?
  fulltext q do
  end
  adjust_solr_params do |p|       
    p[:'defType'] = 'edismax'     
  end
  facet :facet_tag
  paginate :page => 1, :per_page => 8
end

这样我就要求solr使用edsimax查询解析器而不是dismax查询解析器。