2016-04-14 18 views
0

Solrに外部フィールドとして「人気度」フィールドを追加しました。Sunspot Solr:人気のあるフィールドでブーストする方法

"./solr/configsets/sunspot/conf/schema.xml"

<schema name="sunspot" version="1.0"> 

    <!-- ... --> 

    <types> 
    <fieldType name="ext_popularity_field" keyField="id" defVal="1.0" class="solr.ExternalFileField"/> 
    </types> 
    <fields> 
    <field name="popularity" type="ext_popularity_field" /> 
    </fields> 

    <!-- ... --> 

    <listener event="newSearcher" class="org.apache.solr.schema.ExternalFileFieldReloader"/> 
    <listener event="firstSearcher" class="org.apache.solr.schema.ExternalFileFieldReloader"/> 
</schema> 

私は./solr/development/data/external_popularity.txtファイルを生成してきたし、私はそれらのスコアを見ることができますSolrのダッシュボード上でこのクエリ:{!FUNC}

http://localhost:8983/solr/development/select?q=人気& FL = ID、

<?xml version="1.0" encoding="ISO-8859-1"?> 

<response> 
    <lst name="responseHeader"> 
     <int name="status">0</int> 
     <int name="QTime">21</int> 
    </lst> 
    <result name="response" numFound="7626" start="0" maxScore="21.75"> 
     <doc> 
     <str name="id">Item 9788770781701</str> 
     <float name="score">21.75</float> 
     </doc> 
     <doc> 
     <str name="id">Item 9781449661373</str> 
     <float name="score">19.0</float> 
     </doc> 
     <!-- ... --> 
    </result> 
</response> 

スコアだから今の質問は、私実際に参照行う方法であり、これはRailsプロジェクトのですか?私は、検索可能なブロックとItemクラスがあります。

class Item < ActiveRecord::Base 
    searchable include: [:authors, :publisher, :order_temporary_stock] do 
    text :ean 
    text :full_title 
    text :author_names 
    text :publisher_name 

    # ... 
    end 
end 

を...と、一般的な検索:次のように検索のparamsにブースト:

Item.solr_search do 
    fulltext self.q do 
    phrase_fields full_title: 16.0 # pf: full_title_text^16.0 
    phrase_slop 1 

    boost_fields ean:   8.0 # qf: ean_text^8.0 
    boost_fields author_names: 2.0 # qf: author_names_text^2.0 
    boost_fields publisher_name: 2.0 # qf: publisher_name_text^2.0 

    # boost(popularity) 
    end 

end 

答えて

0

は、追加することにより、上記を解決

Item.solr_search do 
    fulltext self.q do 
    phrase_fields full_title: 16.0 # pf: full_title_text^16.0 
    phrase_slop 1 

    boost_fields ean:   8.0 # qf: ean_text^8.0 
    boost_fields author_names: 2.0 # qf: author_names_text^2.0 
    boost_fields publisher_name: 2.0 # qf: publisher_name_text^2.0 
    end 

    adjust_solr_params do |params| 
    params[:boost] = "popularity_score" 
    end 
end 

end

関連する問題