6

クエリが次のように計算されるスコアを返すようにします。

タイトル内の各クエリ用語の出現 + 説明 / クエリ用語の数

例えば

EbSearch.add [ 
new_job( id: 1, title: "Java Programmierer", 
description: "Java Programmierer")
]

res = EbSearch.search("Java Programmierer").results.first.score.should == 4

現時点では、用語ごとにクエリを実行して合計するため、8 が出力されます。後で分割することもできますが、分析されたクエリ用語がないため、複合語がスコアを台無しにする可能性があります.

クエリは次のように構成されています。

search = Tire.search index_name do
  query do 
    dis_max do 
       query { string query, fields: ['title^3', 'description.with_synonyms^0.5'], use_dis_max: false, default_operator: "OR" }  
       query { string query, fields: ['title^3', 'description.without_synonyms'], use_dis_max: false, default_operator: "OR"}
    end
  end
end

この問題をどのように解決できるかについてのアイデアは大歓迎です。

編集

十分なコンテキストを提供していないことに気付きました。

これは、私がすでに取り組んだ他のスニペットです。IDF と正規化を無効にするカスタムの SimilarityProvider を作成しました。https://gist.github.com/outsmartin/6114175

完全なタイヤ コードはhttps://gist.github.com/6114186にあります。例より少し複雑ですが、理解できるはずです。

4

1 に答える 1