Solr negative boost

时光怂恿深爱的人放手 提交于 2019-12-24 13:55:04

问题


I'm looking into the possibility of de-boosting a set of documents during query time. In my application, when I search for e.g. "preferences", I want to de-boost content tagged with ContentGroup:"Developer" or in other words, push those content back in the order. Here's the catch. I've the following weights on query fields and boost query on source

qf=text^6 title^15 IndexTerm^8

As you can see, title has a higher weight.

Now, a bunch of content tagged with ContentGroup:"Developer" consists of a title like "Preferences.material" or "Preferences Property" or "Preferences.graphics". The boost on title pushes these documents at the top.

What I'm looking is to see if there's a way to deboost all documents that are tagged with ContentGroup:"Developer" irrespective of the term occurrence is text or title. I tried something like, but didn't make any difference.

Source:simplecontent^10 Source:Help^20 (-ContentGroup-local:("Developer"))^99

I'm using edismax query parser.

Any pointers will be appreciated.

Thanks,

Shamik


回答1:


You're onto something with your last attempt, but you have to start with *:*, so that you actually have something to subtract the documents from. The resulting set of documents (those not matching your query) can then be boosted.

From the Solr Relevancy FAQ

How do I give a negative (or very low) boost to documents that match a query?

True negative boosts are not supported, but you can use a very "low" numeric boost value on query clauses. In general the problem that confuses people is that a "low" boost is still a boost, it can only improve the score of documents that match. For example, if you want to find all docs matching "foo" or "bar" but penalize the scores of documents matching "xxx" you might be tempted to try...

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

...but this will still help a document matching all three clauses score higher then a document matching only the first two. One way to fake a "negative boost" is to give a large boost to everything that does not match. For example...

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

NOTE: When using (e)dismax, people sometimes expect that specifying a pure negative query with a large boost in the "bq" param will work (since Solr automatically makes top level purely negative positive queries by adding an implicit ":" -- but this doesn't work with "bq", because of how queries specified via "bq" are added directly to the main query. You need to be explicit...

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



来源:https://stackoverflow.com/questions/35594712/solr-negative-boost

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!