2010-12-15 9 views
2

私はSolrインデックスを使用して、 "タグ"というマルチバリューフィールドを持っています。用語 "スタック" は^ 2Solrで一定スコアをクエリする方法

をされている:(フロータグ)

(タグ:::スタック)^ 10 OR(タグ経由)^ 5 OR私は、次の擬似コードのクエリを実行したいです私は、「スタック」の結果が「フロー」のものよりも高く表示されるという結果になりました。

私が抱えている問題は、 "フロー"はいくつかのドキュメントにしか現れないと言うことですが、 "スタック"がロードに現れ、idfの値が高いため "スタック"を持つドキュメントの上に "フロー"を持つドキュメントが現れます。

これはLuceneで直接実装されたプロジェクトで、私はConstantScoreQueryを使用しました。これらはidfをブースト値だけに基づいて削除しました。

これはSolrとSolrNetでどのように達成できますか。私は、ただちにSolrに問い合わせ文字列を渡していますか?それができない場合、私はこの問題に近づけることができる別の方法がありますか?

ありがとうございます!

+0

'(tags:flow)'私はそれが一定のスコアのクエリだと信じています。効果的には、デフォルトである1のスコアブーストです。 – Josh

答えて

2

私はSolrでConstantScoreQueryを直接表現する方法はないと思っていますが、それはrange and prefix queries use ConstantScoreQuery under the hoodと思われます。 tags:[flow TO flow]

また、独自のSolr QueryParserを実装することもできます。

+0

範囲照会を偽ると、(少なくとも今のところは)treatが動作します。私は時間が許せばカスタムクエリパーサーを実装することを見ているかもしれません。ありがとう。 – robinbetts

3

Solr 5.1以降には、^ =演算子を使用してクエリ構文解析構文が組み込まれています。

だから、あなたの元のクエリ取る: (タグ:スタック)^ 10 OR(タグ:オーバー)^ 5 OR(タグ:フロー)^ 2

と置換を^^=がboostedから変更するとあなたの最後の句からスコアを引き上げるとどうなりますか? (タグ:スタック)^ = 10 OR(タグ:以上)^ = 5 OR(タグ:フロー)^ = 2

関連する問題