特定の単語を含むドキュメントの優先度を下げる

トピック作成者:ks-solruserml-bot (2024/05/28 19:22 投稿)
2
CloseClose

(The bot translated the original post https://lists.apache.org/thread/ry4k395bn1ykjr01fb7w83f2kg2zf5ft into Japanese and reposted it under Apache License 2.0. The copyright of posted content is held by the original poster.)

こんにちは、

私は、特定の単語を含むドキュメントを「ディーブースト」して、それらが結果セットの最後に押しやられるようにしたい、または少なくとも結果セットの最初の60件に含まれないようにしたいと考えています。

クエリは、いくつかのフィルタクエリ(fq)パラメータを使用してq=:を実行しています。

このクエリの例では、単語「mask」をチェックし、それに負のブーストファクターを与えます。

試したこと:

bq=P_NewShortDescription:mask^-1
bq=(*:* -P_NewShortDescription:"mask")^0.5

しかし、単語「mask」を含むドキュメントはディーブーストされず、結果セットの後ろに押しやられません。

上記のクエリの結果では、「P_NewShortDescription」フィールドに単語「Mask」を含む3つのドキュメントがあります。
そのうち2つはディーブーストされず、それらには「mask」が含まれていないドキュメントと同じスコア1.5が付けられます。
残りの1つのドキュメントにはスコアが1で、結果セットの最後にあります。

特定の単語を含むドキュメントを正しくディーブーストする方法をアドバイスいただけますか?

これがチェックされるフィールドの定義です。

<field name="P_NewShortDescription" type="text_general" omitNorms="true"
multiValued="false" indexed="true" stored="true"/>

<fieldType name="text_general" class="solr.TextField"
positionIncrementGap="100">
    <analyzer type="index">
      <tokenizer class="solr.StandardTokenizerFactory"/>
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.StopFilterFactory" words="stopwords.txt"
ignoreCase="true"/>
      <filter class="solr.KeywordMarkerFilterFactory"
protected="protwords.txt"/>
      <filter class="solr.SynonymGraphFilterFactory" expand="true"
ignoreCase="true" synonyms="synonyms.txt"/>
      <filter class="solr.KStemFilterFactory"/>
    </analyzer>
    <analyzer type="query">
      <tokenizer class="solr.StandardTokenizerFactory"/>
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.StopFilterFactory" words="stopwords.txt"
ignoreCase="true"/>
      <filter class="solr.KeywordMarkerFilterFactory"
protected="protwords.txt"/>
      <filter class="solr.SynonymGraphFilterFactory" expand="true"
ignoreCase="true" synonyms="synonyms.txt"/>
      <filter class="solr.KStemFilterFactory"/>
    </analyzer>
  </fieldType>

Solrバージョン = 7.7.2

よろしくお願いします。
Derek

返信投稿者:ks-solruserml-bot (2024/05/28 19:22 投稿)

こんにちは、Derekさん

Querqyを調べる価値があるかもしれません。Querqyは、Solr用のオープンソースのクエリプロセッサであり、特定のクエリワードに対してダウンブーストなどのアクションをトリガーできます。
www.querqy.org & https://github.com/querqy

よろしくお願いします。

Charlie

返信投稿者:ks-solruserml-bot (2024/05/28 19:22 投稿)

こんにちは、Derekさん、

BQ(Boost Query)パラメーターはスコアへの追加的な貢献です。Solrは、それまでに計算された各BQクエリのスコア貢献を計算し、これを合計スコアに追加します。

bq=P_NewShortDescription:mask^-1
これはサポートされていません:ブーストは正の浮動小数点数でなければならず、-1.0が指定されています。 org.apache.lucene.search.BoostQuery#BoostQuery
この効果を実現するために、単純なブースト関数クエリを使用できると考えました。たとえば、加算的な貢献を実現するには:
bf=mul(query($qq),-10)&qq=P_NewShortDescription:mask
しかし、スコアの貢献はゼロです:
0.0 = FunctionQuery(product(query(title:cities,def=0.0),const(-10))),
product of:
-32.01146 =
product(query(title:cities,def=0.0)=3.201146,const(-10))
1.0 = boost
"
したがって、スコアへの加算的な変更に対しても、内部的に何らかのコードチェックがあると思われます。
同様に、乗法:
boost=mul(query($qq),-10)&qq=P_NewShortDescription:mask
0 = 切り捨てられたスコア、最大値:
0.0 = 最小スコア
-298.690542362805 = product of:
9.330738 = sum of:
...
ブースト関数を少し試してみれば、それなりの効果が得られるはずです。

bq=(: -P_NewShortDescription:"mask")^0.5
このアプローチでは、指定したフィールドに「mask」という用語が含まれていないすべてのドキュメントのスコアが上がります。ブーストの量を微調整すれば機能します。

古典的な質問
古典的な質問は次のとおりです:どれだけブーストすればよいか?(負の値または正の値)
1つのクエリを改善すると、他の10のクエリが壊れる可能性があります。ここでのお勧めは、お気に入りのメトリクスを複数のクエリにわたって測定するための検索品質評価フレームワークを設定することです。
私たちはRated Ranking Evaluatorをオープンソースコミュニティに貢献しました。これは、検索品質を測定する強力なツールです。ぜひご覧ください、お役に立つかもしれません:https://github.com/SeaseLtd/rated-ranking-evaluator

企業向けには、RRE-Enterpriseも開発しています(近日公開予定:https://sease.io/2019/12/road-to-rated-ranking-evaluator-enterprise.html)

では、また

Alessandro Benedetti
Apache Lucene/Solr コミッター
ディレクター、研究開発ソフトウェアエンジニア、検索コンサルタント

www.sease.io

トピックへ返信するには、ログインが必要です。

KandaSearch

Copyright © 2006-2024 RONDHUIT Co, Ltd. All Rights Reserved.

投稿の削除

この投稿を削除します。よろしいですか?