3

item_nameSolr 5.0.0 でインデックス付けされたフィールドがあります。特定の単語を含むクエリ結果に負のブーストを与えるにはどうすればよいですか?

たとえば、次のitem_nameようなものがあるとします。

Feggi Brown Laptop Bags
Dell Laptop (Black) without Laptop Bag by Dell
HP Laptop with Laptop Bag
Sony laptop without bag
Goldendays Laptop Bag

検索するとlaptop bags、次のような結果が返されます。

Dell Laptop (Black) without Laptop Bag by Dell
HP Laptop with Laptop Bag
Feggi Brown Laptop Bags
Sony laptop without bag
Goldendays Laptop Bag

item_name次のような単語を含むにマイナスまたは低いブーストを与えるにはどうすればよいですか:

あり、なし、...

item_nameこれらの単語を含む が結果のトップにならないようにするためですか?

stopwordsNB:このコンテキストで何か関係がありますか?.

4

2 に答える 2

3

Solrのドキュメントは、次のことに役立ちます。

真の負のブーストはサポートされていませんが、クエリ句で非常に「低い」数値のブースト値を使用できます。一般に、人々を混乱させる問題は、「低い」ブーストでも依然としてブーストであり、一致するドキュメントのスコアのみを改善できるということです。たとえば、「foo」または「bar」に一致するすべてのドキュメントを検索したいが、「xxx」に一致するドキュメントのスコアにペナルティを課したい場合は、試してみたくなるかもしれません...

q = foo^100 bar^100 xxx^0.00001    # NOT WHAT YOU WANT 

...しかし、これにより、3 つの句すべてに一致するドキュメントのスコアが、最初の 2 つの句のみに一致するドキュメントよりも高くなります。「負のブースト」を偽装する 1 つの方法は、 一致しないすべてのものに大きなブーストを与えることです。例えば...

q =  foo^100 bar^100 (*:* -xxx)^999

したがって、あなたの場合、次のようなことをしなければなりません:

q = item_name:laptop^100 item_name:bags^100 (*:* -item_name:with)^99 (*:* -item_name:without)^99

(e)dismax を使用している場合、Solr のドキュメントには次のように記載されています。

(e)dismax を使用する場合、"bq" パラメーターで大きなブーストを使用して純粋なネガティブ クエリを指定するとうまくいくと期待する人がいます (Solr は、暗黙的な " : " を追加することで、トップ レベルの純粋なネガティブ ポジティブ クエリを自動的に作成するためです --) 。 「bq」で指定されたクエリがメインクエリに直接追加されるため、これは「bq」では機能しません。あなたは明確にする必要があります...

? defType = dismax 
& q = foo bar 
& bq = (*:* -xxx)^999

あなたの場合、 との関係はないようですstopwords

于 2015-06-10T10:02:51.703 に答える
2

DisMax では、次のコードを使用して、フィールド 'item_name' に単語 'with' または 'without' を含むドキュメントの関連性スコアを下げることができます。

   - ['bf', "if(or(tf(item_name,'with'),tf(item_name,'without')),-5,0)"]

この構文は Dismax で機能し、私の知る限り、Solr および EDisMax パーサーでも機能します。上記のコードは yaml 形式で、VuFind の関連設定に使用されます。

はい、ストップワードと何らかの関係があります。たとえば、ストップ ワード リストに 'with' という単語がある場合、サラダ ウィズ トマトを検索すると、結果セットはサラダ トマトの場合と同じになります。ドキュメントに「with」という単語が含まれていても、結果セットの順序には影響しません。

于 2016-01-07T12:29:13.430 に答える