2013-01-11 28 views
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變成零。

@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 

我應該如何從太陽黑子獲得所有已發佈的產品?

回答

0

問題中提出的代碼正在工作。問題出在我對solrconfig文件所做的更改。我添加了一個叫做edismax的requestHandler。我假設太陽黑子正在使用它,因爲它被設置爲默認的請求處理程序,並且全文搜索正在工作。

太陽黑子是不是希望被稱爲dismax和becasue沒有這樣的請求處理程序被配置未能檢索所有的文件,因爲Solr的不理解請求處理器:搜索查詢。

實際上,這應該不是問題,因爲太陽黑子的目標是成爲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查詢分析器:

我的代碼改變來解決問題。