2013-08-21 40 views
1

我尝试在索引时间上使用文档增强,但似乎没有任何效果。我建立了我的模型太阳黑子像太阳黑子Solr索引时间提升

Spree::Product.class_eval do 
    searchable :auto_index => true, :auto_remove => true do 
    text :name, :boost => 2.0, stored: true 
    text :description, :boost => 1.2, stored: false 
    boost { boost_value } 
    end 
end 

boost_value字段是在数据库中,用户可以更改前端升压。它被存储在索引时间(无论是第一次构建索引还是产品更新时)。我的数据库中有大约3600种产品,默认boost_value1.0。其中两个产品获得了不同的boost_values,其中一个采用5.0,另一个采用2.0

但是,如果我只是想检索Solr的所有产品,文档,提振作用似乎有次序或没有影响比分:

solr = ::Sunspot.new_search(Spree::Product) do |query| 
    query.order_by("score", "desc") 
    query.paginate(page: 1, per_page: Spree::Product.count) 
end 

solr.execute 
solr.results.first 

Solr的查询本身是这样的:

http://localhost:8982/solr/collection1/select?sort=score+desc&start=0&q=*:*&wt=xml&fq=type:Spree\:\:Product&rows=3600&debugQuery=true

我在最后附加了debugQuery=true,看看分数是多少。但没有显示分数。

当我搜索一个术语时,会发生同样的事情。例如,我有两个产品在name字段内有一个唯一字符串testtest。当我搜索这个术语时,文档增强对订单没有影响。

所以我的问题是:每个文件的检索时间

  • 灿升压的数据库字段使用吗?
  • 文档增强对q=*:*有任何影响吗?
  • 我该如何调试?
  • 或者我必须指定,该solr应该涉及文件提升?

回答

1

在solr中,增强只适用于文本搜索,所以它只适用于您进行全文搜索的情况。 事情是这样的:

solr = ::Sunspot.new_search(Spree::Product) do |query| 
    fulltext 'somesearch' 
    query.order_by("score", "desc") # I think this isn't necesary 
    query.paginate(page: 1, per_page: Spree::Product.count) 
end 

如果你想提高某些产品比别人多:

solr = ::Sunspot.new_search(Spree::Product) do |query| 
    fulltext 'somesearch' do 
    boost(2.0) { with(:featured, true) } 
    end 
    query.paginate(page: 1, per_page: Spree::Product.count) 
end 

正如你看到的,这是比在索引时间提高多强大,你可以把不同的boostings对于不同的条件,如果您想更改提升或条件,则在查询时不需要重新索引。

+0

好的,我明白了。但是对于全文搜索,文档提升也没有任何效果。你知道我可以如何调试吗?或者我如何列出文档提示或计算结果? – 23tux

+0

mmm,不知道如何调试。尽管我发现在查询时比在索引时更好,因为您可以在任何时候更改提示,而无需重新索引所有内容...... – iwiznia

+0

感谢您的回答。我不确定我是否理解这件事,但我认为在查询时您无法设置文档提示。我对吗?这背后的问题是,应该可以使用某些产品。这意味着,当通过搜索检索产品时,或仅在筛选类别时,特色产品应该处于最佳状态。 – 23tux