solrで一定のスコアクエリを行う方法
-
10-10-2019 - |
質問
solrnetを使用して、「タグ」と呼ばれるマルチバリューフィールドがあるsolrインデックスにアクセスしています。次の擬似コードクエリを実行したい:
(タグ:スタック)^10または(タグ:オーバー)^5または(タグ:フロー)^2
「スタック」という用語が10にブーストされている場合、「オーバー」は5によってブーストされ、「フロー」は2によってブーストされています。フロー」など
私が抱えている問題は、「フロー」はいくつかのドキュメントにのみ表示されるが、「スタック」が荷重に表示され、その後、「フロー」があるドキュメントが「スタック」を持つドキュメントの上に表示されるということです。
このプロジェクトがLuceneでまっすぐに実装されたとき、私はConstantsCorequeryを使用しましたが、これらはブースト値のみに基づいてスコアに基づいてIDFを排除しました。
これは、solrとsolrnetでどのようにして達成できますか?できない場合、この問題にアプローチできる別の方法がありますか?
前もって感謝します!
解決
solrで定数corequeryを直接表現する方法はないと思いますが、 範囲とプレフィックスクエリは、フードの下で定数corequeryを使用します, 、だからあなたは範囲クエリを偽造してみることができます。 tags:[flow TO flow]
または、独自のSolr QueryParserを実装できます。
他のヒント
solr 5.1以降は、 ^=演算子を介してクエリパーサー構文にこれを組み込んでいます。
したがって、元のクエリを取得してください:(タグ:スタック)^10または(タグ:オーバー)^5または(タグ:フロー)^2
^を^=に置き換えて、ブーストから定数に変更します:(タグ:スタック)^= 10または(タグ:オーバー)^= 5または(タグ:フロー)^= 2