1

インデックス時にドキュメントブーストを使用しようとしましたが、効果がないようです。Sunspot のようにモデルをセットアップしました

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. 製品のうちの 2 つが異なりboost_values、1 つは5.0で、もう1 つは でした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スコアが何であるかを確認するために、最後にa を追加しました。しかし、スコアは表示されません。

用語を検索すると、同じことが起こります。testtestたとえば、フィールド内に一意の文字列を持つ 2 つの製品があり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 に答える