here you can play with boost

(+includes:(red frogs) -excludes:(red frogs))^2.0 excludes:(red frogs)^0.5

you can also play with numbers to achieve best results.

this is first solution I've thought about(I mean there may be more efficient 
solutions)


regards,

Volodymyr Bychkoviak


Ryan Skow wrote:

That works very well - thank you for your quick reply.  As a followup
question, what if the desired effect was to force hits containing terms in
the 'excludes' field to appear below other hits?

Example using the same setup as before:
 Query: red frogs
 Result: both documents would be returned, but DocumentB would appear
before DocumentA since it doesn't have any matching terms in the
excludes field

Again, thanks for your reply - it definitely satisfied my initial request.

Ryan

string query should look like: "+includes:(red frogs) -excludes:(red
frogs)"

You can play with MultiFieldQueryParser a bit.

regards,
Volodymyr Bychkoviak

Ryan Skow wrote:

Here is the logical structure of the document I'm working with:
The 'Document' has two fields:
  'includes' - List of terms that provide positive boost
  'excludes' - List of terms that provide negative boost

Here is a usage scenario:
  DocumentA
    includes: red green blue
    excludes: frogs birds snails

  DocumentB
    includes: red green blue
    excludes: <empty>

Here is the desired effect for a couple query strings:
  Query: red
  Result: both documents would be returned with equal score

  Query: red frogs
  Result: only DocumentB would be returned because DocumentA excludes
frogs

My question is: can Lucene do this with a single query?  One option is to
do separate queries searching first the 'includes' and then on the
'excludes' field, then removing documents from the 'includes' Hits that
exist in the 'excludes' Hits.  This solution to works, but is somewhat
cumbersome and inefficient.

I've tried calling excludesField.setBoost((float)-1) as well as passing
small decimals in the setBoost method, but that still adds a smaller
value
to the score instead of subtracting from it.

Has anyone solved this problem in better/different ways?

Thanks!


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to