Mike just committed a read-only IndexReader recently.  If you pull Lucene out 
of the svn trunk, you'll be able to make use of that.  The r-o IR doesn't have 
a synchronized isDeleted, I believe.

Otis
--
Sematext -- http://sematext.com/ -- Lucene - Solr - Nutch



----- Original Message ----
> From: German Kondolf <[EMAIL PROTECTED]>
> To: java-user@lucene.apache.org
> Sent: Monday, August 25, 2008 4:58:00 PM
> Subject: Re: FilteredQuery
> 
> Exactly as Otis sais, you should use MatchAllDocs as query, but it has a
> drawback in performance, it checks every single document deletion state,
> I've solved the issue by making my own EnhancedMatchAllDocs query that is
> optimized to do not check this document state.
> 
> Perhaps the SegmentReader should be refactorized in some other way and not
> be synchronized:
> 
>   public synchronized boolean isDeleted(int n) {
>     return (deletedDocs != null && deletedDocs.get(n));
>   }
> 
> With high level of concurrency this is an issue, there is a lot of
> context-switching because of this line of code...
> I didn't try an optimal solution, so I created my own EnhancedMatchAllDocs.
> 
> Just copied the original class and replaced this call:
> 
>     public boolean next() {
>       while (id < maxId) {
>         id++;
>         if (!reader.isDeleted(id)) {
>           return true;
>         }
>       }
>       return false;
>     }
> 
> For this simplified call:
> 
>     public boolean next() {
>         return (id++ < maxId);
>     }
> 
> This change doesn't validate deleted documents, in my implementation it was
> not a problem, so, it's possible that this solution doesn't work with any
> other implementation.
> Maybe it wouldn't be a problem if you flush your index often...
> 
> GeR
> 
> On Mon, Aug 25, 2008 at 2:38 PM, Otis Gospodnetic <
> [EMAIL PROTECTED]> wrote:
> 
> > Heiko,
> > It's most likely because that B case has a purely negative query. Perhaps
> > you can combine it with MatchAllDocs query?
> >
> >
> > Otis
> > --
> > Sematext -- http://sematext.com/ -- Lucene - Solr - Nutch
> >
> >
> >
> > ----- Original Message ----
> > > From: Heiko 
> > > To: java-user@lucene.apache.org
> > > Sent: Monday, August 25, 2008 11:29:22 AM
> > > Subject: FilteredQuery
> > >
> > > Hi All,
> > >
> > > i would like to use the FilteredQuery to filter my search results with
> > > the occurrence or absence of certain ids.
> > >
> > > Example A:
> > > query -> text:"albert einstein"
> > > filterQuery -> doctype:letter
> > >
> > > That's ok. I am getting the expected results. But i got no results, if
> > > i  filter with the absence of an id.
> > >
> > > Example B:
> > > query -> text:"albert einstein"
> > > filterQuery -> NOT doctype:article
> > >
> > > However following concatenation of filterQuery and query leads to the
> > > expected result.
> > >
> > > Example C:
> > > query -> text:"albert einstein"
> > > filterQuery -> text:"albert einstein" NOT doctype:article
> > >
> > > I am confused that Example B does not worked. It is bug?
> > >
> > > I am using Lucene 2.3.2 and the following code fragement:
> > >
> > > Query query;
> > > Query filterQuery;
> > > ...
> > > Filter filter = new CachingWrapperFilter(new
> > > QueryWrapperFilter(filterQuery));
> > > FilteredQuery filteredQuery = new FilteredQuery(query, filter);
> > > Hits hits = searcher.search(filteredQuery);
> > > ...
> > >
> > > Thanks,
> > > Heiko Müller
> > >
> > >
> > > ---------------------------------------------------------------------
> > > 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