1

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

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最后附加了一个,看看分数是多少。但是没有显示分数。

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

所以我的问题是:

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

1 回答 1

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

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

于 2013-08-21T11:09:42.390 回答