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]

Reply via email to