You could write a custom analyzer that drops stopwords but adds an extra 1 to 
the "positionIncrement" property for the next valid Token after each omiited 
stop word.

This would retain the benefit of removing stopwords from your index and yet 
prevent your example phrases matching (because the remaining words are not 
recorded as being directly next to each other)

Cheers
Mark


----- Original Message ----
From: Sirish Vadala <[EMAIL PROTECTED]>
To: java-user@lucene.apache.org
Sent: Tuesday, 18 December, 2007 5:10:19 PM
Subject: RE: Phrase Query Problem


Yes... If my query phrase is "Health Safety", docs with "Health and
 Safety",
"Health or Safety" are being returned...

So... Is there any other way to handle this situation... Especially in
 the
above mentioned case, the user is expecting around 5 records and the
 query
is fetching more than 550 records.8-O

Thanks.


Zhang, Lisheng wrote:
> 
> Hi,
> 
> Do you mean that your query phrase is "Health Safety",
> but docs with "Health and Safety" returned?
> 
> If that is the case, the reason is that StandardAnalyzer
> filters out "and" (also "or, "in" and others) as stop 
> words during indexing, and the QueryParser filters those
> words out also.
> 
> Best regards, Lisheng
> 
> -----Original Message-----
> From: Sirish Vadala [mailto:[EMAIL PROTECTED]
> Sent: Monday, December 17, 2007 9:49 AM
> To: java-user@lucene.apache.org
> Subject: Phrase Query Problem
> 
> 
> 
> I have the following code for search:
> 
> BooleanQuery bQuery = new BooleanQuery();
> Query queryAuthor;
> queryAuthor = new TermQuery(new Term(IFIELD_LEAD_AUTHOR,
> author.trim().toLowerCase()));
> bQuery.add(queryAuthor, BooleanClause.Occur.MUST);
> ....................................................................
> ....................................................................
> 
> PhraseQuery pQuery = new PhraseQuery();
> String[] phrase = txtWithPhrase.toLowerCase().split(" ");
> for (int i = 0; i < phrase.length; i++) {
>     pQuery.add(new Term(IFIELD_TEXT, phrase[i]));
> }
> pQuery.setSlop(0);
> bQuery.add(pQuery, BooleanClause.Occur.MUST);
> ....................................................................
> ....................................................................
> 
> String[] sortOrder = {IFIELD_LEAD_AUTHOR, IFIELD_TEXT};
> Sort sort = new Sort(sortOrder);
> hits = indexSearcher.search(bQuery, sort);
> 
> Now My problem here is: If I do a search on a phrase with text Health
> Safety, it is fetching me all the records where in the text is Health
> and/or/in Safety. It is fetching me these records even after setting
 the
> slop of the phrase query to zero for exact match. I am using standard
> analyzer while indexing my records.
> 
> Any help on this is greatly appreciated. 
> 
> Sirish Vadala
> -- 
> View this message in context:
> http://www.nabble.com/Phrase-Query-Problem-tp14373945p14373945.html
> Sent from the Lucene - Java Users mailing list archive at Nabble.com.
> 
> 
> ---------------------------------------------------------------------
> 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]
> 
> 
> 

-- 
View this message in context:
 http://www.nabble.com/Phrase-Query-Problem-tp14373945p14401354.html
Sent from the Lucene - Java Users mailing list archive at Nabble.com.


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






      __________________________________________________________
Sent from Yahoo! Mail - a smarter inbox http://uk.mail.yahoo.com


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

Reply via email to