【问题标题】:Sunspot Solr index time boost太阳黑子 Solr 指数时间提升
【发布时间】:2013-08-23 10:19:27
【问题描述】:

我尝试在索引时间上使用文档提升,但它似乎没有任何效果。我已经为太阳黑子设置了我的模型,例如

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_valueof 1.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,看看分数是多少。但是没有显示分数。

当我搜索一个词时,也会发生同样的事情。例如,我有 2 个产品在 name 字段中具有唯一字符串 testtest。当我搜索这个词时,文档提升对顺序没有影响。

所以我的问题是:

  • 是否可以基于数据库字段使用每个文档的索引时间提升?
  • 文档提升对q=*:* 有任何影响吗?
  • 如何调试?
  • 还是我必须指定,solr 应该涉及文档提升?

【问题讨论】:

    标签: ruby-on-rails solr full-text-search sunspot


    【解决方案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
    

    如您所见,这比索引时的提升要强大得多,您可以针对不同的条件进行不同的提升,所有这些都在查询时进行,如果您想更改提升或条件,则无需重新索引。

    【讨论】:

    • 好的,我明白了。但是对于全文搜索,文档提升也没有任何效果。你知道我怎么调试这个吗?或者我如何列出文档提升或计算是如何完成的?
    • 嗯,不知道如何调试它。虽然我发现在查询时提升比在索引时更好,因为您可以随时更改提升,而无需重新索引所有内容......
    • 感谢您的回答。我不确定我是否理解正确,但我认为您无法在查询时设置文档提升。我对吗?这背后的问题是,应该可以展示一些产品。这意味着,当通过搜索检索产品时,或者仅在过滤类别时,特色产品应该位于顶部。
    • 我现在不确定您是否可以在查询时提升文档,但是做您需要的事情相当简单。假设您有一个名为“精选”的字段,那么您只能提升这些文档。查看更新的答案...
    • 嗯,但是我的问题中提到的 boost_value 字段呢?我怎样才能调用这个值,例如Doc1 具有2.0 的提升值,Doc2 具有3.0 的提升值。假设我们搜索一个词 somesearch,Doc1 得到 10 分,Doc2 得到 8 分。是否可以调用 boost_value 使 Doc2 得到更高的分数?
    猜你喜欢
    • 2014-07-23
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 2014-03-29
    相关资源
    最近更新 更多