2

SolrNetを使用して、「タグ」と呼ばれる複数値フィールドがあるSolrインデックスにアクセスしています。次の擬似コードクエリを実行したい:

(tags:stack)^ 10 OR(tags:over)^ 5 OR(tags:flow)^ 2

ここで、「スタック」という用語は10ブーストされ、「オーバー」は5ブーストされ、「フロー」は2ブーストされます。私が求めている結果は、「スタック」の結果が「スタック」の結果よりも高く表示されることです。フロー」など。

私が抱えている問題は、「フロー」が2、3のドキュメントにしか表示されないが、「スタック」がロードに表示されることです。idf値が高いため、「フロー」のドキュメントが「スタック」のドキュメントの上に表示されます。

これがプロジェクトがLuceneで直接実装されたとき、私はConstantScoreQueryを使用し、これらはブースト値のみに基づくスコアに基づいてidfを排除しました。

これは、Solrにクエリ文字列を渡すだけのSolrとSolrNetでどのように実現できますか?それができない場合、私がこの問題に取り組むことができる別の方法はありますか?

前もって感謝します!

4

2 に答える 2

9

Solr 5.1以降では、これが^=演算子を介してクエリパーサー構文に組み込まれています。

したがって、元のクエリを取得します:(tags:stack)^ 10 OR(tags:over)^ 5 OR(tags:flow)^ 2

そして、^を^ =に置き換えて、ブーストから定数に変更します:(tags:stack)^ = 10 OR(tags:over)^ = 5 OR(tags:flow)^ = 2

于 2014-06-20T16:30:48.650 に答える
3

SolrでConstantScoreQueryを直接表現する方法はないと思いますが、範囲クエリとプレフィックスクエリは内部でConstantScoreQueryを使用しているようです。したがって、範囲クエリを偽造してみることができます。tags:[flow TO flow]

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

于 2010-12-15T20:23:07.597 に答える