4

たとえば、モデルに次のコードが含まれています。

class Facility < ActiveRecord::Base
...
searchable do
  text :name
  text :facility_type do
end
...

そしてこれは検索コントローラーで:

 @search = Facility.search do
    keywords(query) do
      boost_fields :name =>  1.9,
                   :facility_type => 1.98
    end
    ...

そして、2つのFacilityオブジェクトがあります。1つは「cafe」タイプですが、名前に「cafe」という単語は含まれていません。2つ目は、たとえば「cafe sun」と呼ばれますが、「bar」タイプです。事実。

query = "cafe"で検索を実行し、応答で両方の機能を取得しましたが、スコアは「カフェサン」の場合は5.003391、実際の「カフェ」の場合は1.250491です。

2回目の試行では

boost_fields :name =>  1.9, :facility_type => 3

「カフェサン」のスコアは変わりませんが、「カフェ」はやや成長しました-1.8946824

それで、結果がスコアでソートされている限り、それがどのように計算されるのか興味がありますか?

または、間違ったトークナイザーなどを選択していますか?これがschema.xmlにあるものです

<fieldType name="text" class="solr.TextField" omitNorms="false">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EdgeNGramFilterFactory"
            minGramSize="3"
            maxGramSize="30"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>
4

1 に答える 1

3

スコアリングの結果はLuceneライブラリのドメインであり、そのアルゴリズムの核心はここで詳細に説明されています。

生のスコアリングデータを検査するには、Solrインスタンスに対して直接クエリを実行し、debugQuery=onパラメーターを追加してスコアリングデータを確認します。

http://localhost:8983/solr/select?q=test&defType=dismax&qf=name_text+facility_type_text&debugQuery=on

Solrでの一般的な関連性の最適化については、SolrRelevancyFAQを参照してください。また、の出力を具体的に示す1つの質問がありますdebugQuery

全体として、あなたは非常に深い答えで非常に良い質問をします。私は、主題を拡大するために、将来的に私の応答を編集するかもしれません。

于 2011-09-03T00:07:59.243 に答える