問題タブ [solr-boost]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
solr - ヒットを含むフィールドに基づいて Solr の結果をブーストする
索引付けと検索のフレームワークを探して Web をブラウジングしていたところ、Solr に出会いました。絶対に必要な機能は、ヒットが含まれるフィールドに基づいて結果をブーストすることです。
小さな例:
次のようなレコードを考えてみましょう:
title
たとえば、alternative_title
とフィールドを 1 つの検索フィールドに結合したいのですがplot
、Solr/Lucene のドキュメントとチュートリアルを見ればそれほど難しくありません。
ただし、ヒットした映画はヒットした映画よりもスコアが高く、ターン中の映画はフィールドのヒットよりもスコアが高くなることも望んでtitle
いalternative_title
ますplot
。
XML でこの種のスコアリングを示す方法はありますか、それとも独自のスコアリング アルゴリズムを開発する必要がありますか?
また、私が示した例は架空のものであり、実際のデータにはおそらく 100 以上のフィールドが含まれることにも注意してください。
solr - Solr:fieldNormはドキュメントごとに異なり、ドキュメントのブーストはありません
検索結果をスコア順に並べたいのですが、スコアが正しく計算されていません。つまり、必ずしも不適切ではありませんが、予想とは異なり、理由はわかりません。私の目標は、スコアを変更しているものをすべて削除することです。
2つのオブジェクト(ObjectAはObjectBよりも高いスコアが期待される)で一致する検索を実行すると、ObjectBが最初に返されます。
この例では、私のクエリが「apples」という単一の用語であるとしましょう。
ObjectAのタイトル:「リンゴはリンゴです」(2/3用語)
ObjectAの説明:「リンゴにはリンゴがありました-リンゴ、そして今やリンゴはすべてのリンゴをリンゴのいたるところに行きました!」(6/18用語)
ObjectBのタイトル:「リンゴは素晴らしい」(1/3用語)
ObjectBの説明:「リンゴの部屋にはリンゴがありましたが、今ではリンゴ全体が悪くなりました!」(4/18用語)
タイトルフィールドにはブーストがなく(つまり、1のブースト)、説明フィールドには0.8のブーストがあります。solrconfig.xmlまたは通過するクエリを介してドキュメントブーストを指定していません。ドキュメントブーストを指定する別の方法がある場合、私がそれを見逃している可能性があります。
プリントアウトを分析した後、 ObjectAはObjectBよりも高いスコアを適切に計算しているexplain
ように見えますが、 1つの違いがあります。ただし、ObjectBのタイトルfieldNormは常にObjectAよりも高くなっています。
以下はexplain
プリントアウトです。ご存知のとおり、タイトルフィールドはmditem5_tns
で、説明フィールドはmditem7_tns
次のとおりです。
solr - Solrでコンスタントスコアクエリを実行する方法
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でどのように実現できますか?それができない場合、私がこの問題に取り組むことができる別の方法はありますか?
前もって感謝します!
solr - geodist()の逆数によってSolr関連性スコアをブーストする方法
だから私はSolr4を実装し、うまく使用しました。Solr4は素晴らしいと言わざるを得ません。とにかく、距離でソートし、ジオフィルターを使用して結果を特定の領域に制限しました。ここでやりたいのは、距離の逆数で関連性スコアを上げることです。このページではそれについて説明していますが、その方法については説明していません(http://wiki.apache.org/solr/SpatialSearch)
次のことを試しましたが、エラーが発生します。
http://localhost:8983/solr/select/?q={!boost b=recip(geodist(), 1, 1000, 1000)}...
私が得るエラーは次のとおりです。
org.apache.lucene.queryParser.ParseException: Expected identifier at pos 27 str='{!boost b=recip(geodist(), 1, 10 in ...
どんな助けでもいただければ幸いです。ありがとう!
solr - multiValued からの 1 つの単語の一致で Solr の結果をブーストする
特定のフィールドを持つsolrスキーマがあります:
今、クエリで検索しています(%sは私の検索文字列です)
q={!boost b=recip(ms(NOW,date),3.16e-11,1,1)}%s&defType=dismax&qf=title^100 note
レコードごとにタグのようなものが必要です。
単語の 1 つが「タグ」フィールドの値の 1 つと一致するレコードの結果を後押しするにはどうすればよいですか?
アップデート
{!boost b=recip(ms(NOW,date),3.16e-11,1,1)} を q から削除すると、クエリが希望どおりに機能することがわかりました。しかし、これではそうではありません
更新 2
さっきわかった、さっきの「わかった」は完全に間違っていた。一部の検索文字列では機能しますが、うまく機能しません。私はこの振る舞いが必要だと思います:
「タイトル」と「メモ」フィールドでは「AND」で検索する必要がありますが、「タグ」フィールドでは「OR」で検索する必要があります。どうすればdismaxでそれを行うことができますか?
{!boost} とクエリ関数を試してみましたが、良い結果は得られませんでした
boost - フィールドをブーストするために dismax requesthandlar を構成する
検索にブーストを適用したい。クエリ用語が説明と名前の両方にある場合、説明フィールドにクエリ用語を含むドキュメントよりも検索結果の上位に表示されるようにしたいと考えています。このために、dismax リクエスト ハンドラを次のように設定します。
しかし、検索結果に何の効果も見られません。効果を確認するには、さらに構成を行う必要がありますか。
solr - SolrNet:インデックス時にブースト値を指定する正しい方法は何ですか?
1から10までのBoost値を持つドキュメントにインデックスを付けます。1つの方法は、AddWithBoost(doc、boostvalue)を使用することです。しかし、これは正しい方法ですか?ブースト値が10のドキュメントが、クエリの値が9のドキュメントよりも上位にランク付けされるようにするには、スケール(1〜10)を他の範囲に変換する必要がありますか?私が探しているのは、Boostの標準的な使用方法だと思います。
django - Django Haystack-フィールドをブーストする方法は?
DjangoHaystack1.2.5でいくつか問題があります。1つのフィールドをブーストする必要がありますが、どうやらそれは機能していません。Solr1.4.1を使用しています。
私のインデックス:
job_titleに「boost=1.50」がありますが、これは明らかに機能していません。これはSolrによって生成されたものです。
私が行っているクエリは次のとおりです。
Haystack Boostを機能させるために必要なものについて、誰かに手がかりを教えてもらえますか?
よろしくお願いします、
更新1:「job_title」フィールドをより重要視する必要があります。たとえば、「プログラマー」という単語を検索する場合、最初に「job_title」フィールドに「プログラマー」が含まれる結果を日付順に表示し、次に「プログラマー」が含まれる結果を表示する必要があります。 「job_description」フィールド。Haystackブーストはこれを達成するための適切なツールですか?
solr - Solr-フィールドブーストはどのように機能しますか?
Solrは初めてです。Solr1.4.1の使用
このフィールドを持つschema.xmlがあります:
「job_title」フィールドをもっと重要視する必要があります。たとえば、「プログラマー」という単語を検索する場合、最初に「job_title」フィールドに「プログラマー」が含まれる結果を日付順に表示する必要があります。次に、「プログラマー」という単語が含まれる結果を表示する必要があります。 「job_description」フィールド。
日付でユーザー注文して一緒にブーストすることは可能ですか?
これを行うために私が注意を払う必要があることについていくつかの手がかりを教えてください。
よろしくお願いします、
search - SOLR-「余分な」単語が少ない、より小さなドキュメントをランク付けする
私のSOLRドキュメントはワインエンティティです。ユーザーがキーワード「HautBailly」(ボルドーのワイン)を検索するとき、最初に、タイトルの長さが短い、厳密に一致するドキュメントを取得したいと思います。例:
- 「ChâteauHaut-Bailly-Pessac-Léognan」
- 「ChâteauHaut-BaillyLaPardedeHautBailly-Pessac-Léognan」
ただし、デフォルトのsolrクエリでは、キーワード「hautbaily」は次のランキングを返します。
- 「ChâteauHaut-BaillyLaPardedeHautBailly-Pessac-Léognan」
- 「ChâteauHaut-Bailly-Pessac-Léognan」
検索されたフレーズ(長さの点で)と短いフィールド(ここではタイトル)に近い試合のスコアを上げるために遊ぶことができるパラメーターはありますか?ここで、適切なワイン( "ChâteauHaut-Bailly-Pessac-Léognan")がランキングに登場しますか?
ありがとうございました!