Re: Negative Match

2005-02-11 Thread Luke Shannon
Thanks Eric. This is indeed the way to go.


- Original Message - 
From: "Erik Hatcher" <[EMAIL PROTECTED]>
To: "Lucene Users List" 
Sent: Friday, February 11, 2005 10:25 AM
Subject: Re: Negative Match


> 
> On Feb 11, 2005, at 9:52 AM, Luke Shannon wrote:
> 
> > Hey Erik;
> >
> > The problem with that approach is I get document that don't have a
> > kcfileupload field. This makes sense because these documents don't 
> > match the
> > prohibited
> > clause, but doesn't fit with the requirements of the system.
> 
> Ok, so instead of using the dummy field with a single dummy value, use 
> a dummy field to list the field names.  
> Field.Keyword("fields","kcfileupload"), but only for the documents that 
> should have it, of course.  Then use a query like (using QueryParser 
> syntax, but do it with the API as you have since QueryParser doesn't 
> support leading wildcards):
> 
> +fields:kcfileupload -kcfileupload:*jpg*
> 
> Again, your approach is risky with term expansion.  Get more than 1,024 
> unique kcfileupload values and you'll see!
> 
> Erik
> 
> 
> >
> > What I like best about this approach is it doesn't require a filter. 
> > The
> > system I integrate with is presently designed to accept a query 
> > object. I
> > wasn't looking forward to having to add the possibility that queries 
> > might
> > require filters. I may have to still do this, but for now I would like 
> > to
> > try this and see how it goes.
> >
> > Thanks,
> >
> > Luke
> >
> > - Original Message -----
> > From: "Erik Hatcher" <[EMAIL PROTECTED]>
> > To: "Lucene Users List" 
> > Sent: Thursday, February 10, 2005 7:23 PM
> > Subject: Re: Negative Match
> >
> >
> >>
> >> On Feb 10, 2005, at 4:06 PM, Luke Shannon wrote:
> >>
> >>> I think I found a pretty good way to do a negative match.
> >>>
> >>> In this query I am looking for all the Documents that have a
> >>> kcfileupload
> >>> field with any value except for jpg.
> >>>
> >>> Query negativeMatch = new WildcardQuery(new
> >>> Term("kcfileupload",
> >>> "*jpg*"));
> >>>  BooleanQuery typeNegAll = new BooleanQuery();
> >>> Query allResults = new WildcardQuery(new Term("kcfileupload",
> >>> "*"));
> >>> IndexSearcher searcher = new IndexSearcher(fsDir);
> >>> BooleanClause clause = new BooleanClause(negativeMatch, 
> >>> false,
> >>> true);
> >>> typeNegAll.add(allResults, true, false);
> >>> typeNegAll.add(clause);
> >>> Hits hits = searcher.search(typeNegAll);
> >>>
> >>> With the little testing I have done this *seems* to work. Does anyone
> >>> see a
> >>> problem with this approach?
> >>
> >> Sure do you realize what WildcardQuery does under the covers?  It
> >> literally expands to a BooleanQuery for all terms that match the
> >> pattern.  There is an adjustable limit built-in of 1,024 clauses to
> >> BooleanQuery.  You obviously have not hit that limit ... yet!
> >>
> >> You're better off using the advice offered on this thread
> >> previously create a single dummy field with a fixed value for all
> >> documents.  Combine a TermQuery for that dummy value with a prohibited
> >> clause like y our negativeMatch above.
> >>
> >> Erik
> >>
> >>
> >> -
> >> 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]



Re: Negative Match

2005-02-11 Thread Erik Hatcher
On Feb 11, 2005, at 9:52 AM, Luke Shannon wrote:
Hey Erik;
The problem with that approach is I get document that don't have a
kcfileupload field. This makes sense because these documents don't 
match the
prohibited
clause, but doesn't fit with the requirements of the system.
Ok, so instead of using the dummy field with a single dummy value, use 
a dummy field to list the field names.  
Field.Keyword("fields","kcfileupload"), but only for the documents that 
should have it, of course.  Then use a query like (using QueryParser 
syntax, but do it with the API as you have since QueryParser doesn't 
support leading wildcards):

+fields:kcfileupload -kcfileupload:*jpg*
Again, your approach is risky with term expansion.  Get more than 1,024 
unique kcfileupload values and you'll see!

Erik

What I like best about this approach is it doesn't require a filter. 
The
system I integrate with is presently designed to accept a query 
object. I
wasn't looking forward to having to add the possibility that queries 
might
require filters. I may have to still do this, but for now I would like 
to
try this and see how it goes.

Thanks,
Luke
- Original Message -
From: "Erik Hatcher" <[EMAIL PROTECTED]>
To: "Lucene Users List" 
Sent: Thursday, February 10, 2005 7:23 PM
Subject: Re: Negative Match

On Feb 10, 2005, at 4:06 PM, Luke Shannon wrote:
I think I found a pretty good way to do a negative match.
In this query I am looking for all the Documents that have a
kcfileupload
field with any value except for jpg.
Query negativeMatch = new WildcardQuery(new
Term("kcfileupload",
"*jpg*"));
 BooleanQuery typeNegAll = new BooleanQuery();
Query allResults = new WildcardQuery(new Term("kcfileupload",
"*"));
IndexSearcher searcher = new IndexSearcher(fsDir);
BooleanClause clause = new BooleanClause(negativeMatch, 
false,
true);
typeNegAll.add(allResults, true, false);
typeNegAll.add(clause);
Hits hits = searcher.search(typeNegAll);

With the little testing I have done this *seems* to work. Does anyone
see a
problem with this approach?
Sure do you realize what WildcardQuery does under the covers?  It
literally expands to a BooleanQuery for all terms that match the
pattern.  There is an adjustable limit built-in of 1,024 clauses to
BooleanQuery.  You obviously have not hit that limit ... yet!
You're better off using the advice offered on this thread
previously create a single dummy field with a fixed value for all
documents.  Combine a TermQuery for that dummy value with a prohibited
clause like y our negativeMatch above.
Erik
-
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]


Re: Negative Match

2005-02-11 Thread Luke Shannon
Hey Erik;

The problem with that approach is I get document that don't have a
kcfileupload field. This makes sense because these documents don't match the
prohibited
clause, but doesn't fit with the requirements of the system.

What I like best about this approach is it doesn't require a filter. The
system I integrate with is presently designed to accept a query object. I
wasn't looking forward to having to add the possibility that queries might
require filters. I may have to still do this, but for now I would like to
try this and see how it goes.

Thanks,

Luke

- Original Message - 
From: "Erik Hatcher" <[EMAIL PROTECTED]>
To: "Lucene Users List" 
Sent: Thursday, February 10, 2005 7:23 PM
Subject: Re: Negative Match


>
> On Feb 10, 2005, at 4:06 PM, Luke Shannon wrote:
>
> > I think I found a pretty good way to do a negative match.
> >
> > In this query I am looking for all the Documents that have a
> > kcfileupload
> > field with any value except for jpg.
> >
> > Query negativeMatch = new WildcardQuery(new
> > Term("kcfileupload",
> > "*jpg*"));
> >  BooleanQuery typeNegAll = new BooleanQuery();
> > Query allResults = new WildcardQuery(new Term("kcfileupload",
> > "*"));
> > IndexSearcher searcher = new IndexSearcher(fsDir);
> > BooleanClause clause = new BooleanClause(negativeMatch, false,
> > true);
> > typeNegAll.add(allResults, true, false);
> > typeNegAll.add(clause);
> > Hits hits = searcher.search(typeNegAll);
> >
> > With the little testing I have done this *seems* to work. Does anyone
> > see a
> > problem with this approach?
>
> Sure do you realize what WildcardQuery does under the covers?  It
> literally expands to a BooleanQuery for all terms that match the
> pattern.  There is an adjustable limit built-in of 1,024 clauses to
> BooleanQuery.  You obviously have not hit that limit ... yet!
>
> You're better off using the advice offered on this thread
> previously create a single dummy field with a fixed value for all
> documents.  Combine a TermQuery for that dummy value with a prohibited
> clause like y our negativeMatch above.
>
> Erik
>
>
> -
> 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]



Re: Negative Match

2005-02-10 Thread Erik Hatcher
On Feb 10, 2005, at 4:06 PM, Luke Shannon wrote:
I think I found a pretty good way to do a negative match.
In this query I am looking for all the Documents that have a 
kcfileupload
field with any value except for jpg.

Query negativeMatch = new WildcardQuery(new 
Term("kcfileupload",
"*jpg*"));
 BooleanQuery typeNegAll = new BooleanQuery();
Query allResults = new WildcardQuery(new Term("kcfileupload", 
"*"));
IndexSearcher searcher = new IndexSearcher(fsDir);
BooleanClause clause = new BooleanClause(negativeMatch, false,
true);
typeNegAll.add(allResults, true, false);
typeNegAll.add(clause);
Hits hits = searcher.search(typeNegAll);

With the little testing I have done this *seems* to work. Does anyone 
see a
problem with this approach?
Sure do you realize what WildcardQuery does under the covers?  It 
literally expands to a BooleanQuery for all terms that match the 
pattern.  There is an adjustable limit built-in of 1,024 clauses to 
BooleanQuery.  You obviously have not hit that limit ... yet!

You're better off using the advice offered on this thread 
previously create a single dummy field with a fixed value for all 
documents.  Combine a TermQuery for that dummy value with a prohibited 
clause like y our negativeMatch above.

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


Negative Match

2005-02-10 Thread Luke Shannon
I think I found a pretty good way to do a negative match.

In this query I am looking for all the Documents that have a kcfileupload
field with any value except for jpg.

Query negativeMatch = new WildcardQuery(new Term("kcfileupload",
"*jpg*"));
 BooleanQuery typeNegAll = new BooleanQuery();
Query allResults = new WildcardQuery(new Term("kcfileupload", "*"));
IndexSearcher searcher = new IndexSearcher(fsDir);
BooleanClause clause = new BooleanClause(negativeMatch, false,
true);
typeNegAll.add(allResults, true, false);
typeNegAll.add(clause);
Hits hits = searcher.search(typeNegAll);

With the little testing I have done this *seems* to work. Does anyone see a
problem with this approach?

Thanks,

Luke



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