0

这应该很简单,但我无法让它工作。

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

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

@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 变为 nil。

@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

我应该如何从 sunspot 获取所有已发布的产品?

4

1 回答 1

0

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

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

实际上这根本不应该是一个问题,因为 Sunspot 旨在成为 Solr 的完整抽象,并且不需要更改 solr 配置文件。当谈到 Solr 的更高级使用时,Sunspot 还没有出现,因此经常需要进行更改。幸运的是,可以使用 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 查询解析器。

于 2013-01-15T22:40:56.673 回答