One thing is a bit confusing...
On 8/8/06, Simon Willnauer <[EMAIL PROTECTED]> wrote:
Hey Andy,
It would be interesting how many ids you include into your query. I do
have just a couple of usergroups for that.
I create a BooleanQuery
BooleanQuery q = new BooleanQuery();
q.add(new BooleanClause(new TermQuery(new
Term("idfield","id")),BooleanClause.Occur.MUST));
if you have just one id in your id field the occur value should be
"SHOULD" as we have multiple usergroups in the field. :) Otherwise you
won't get a single hit.
regards simon
QueryFilter filter = new QueryFilter(q);
searcher.search(yourActualQuery,filter);
you can put your created filters into a HashSet or event better in a
weak hashset to cache the queryfilter and reuse them. The hash value
of a query filter depends on the acutal query so that should be fine.
Just have a look at QueryFilter#hashCode().
if you got a large set of ids take care on BooleanQuery.setMaxClauseCount()
You can also keep your filter if you close your indexwriter and
release a new indexsearcher as the queryfilter caches the reader
instance internally.
best regards simon
On 8/8/06, hu andy <[EMAIL PROTECTED]> wrote:
>
> Hey,Simon, thanks for your reply
> I have an ID Field in the index. For the efficiency of indexing speed, I put
> some fields in
> a database, because I found the total of fields in a Document will badly
> degrade the indexing speed. So for the search, I will first query the
> database to get a list of ID, then use the list to check whether the Lucene
> seached results should be returned.
> Can you give some suggestion?
>
> Also can you show me to how you use filter?
>
> 2006/8/8, Simon Willnauer <[EMAIL PROTECTED]>:
> >
> Hey Andy,
>
> i don't know how you determinate whether a document has to be
> displayed or not but I use a filter to do such kind of jobs. We have a
> index for a specific website with personalized areas which should be
> searchable for users having corresponding usergroups. That works quiet
> well and you can use the filter cache e.g. cache the filter itself for
> your queries.
>
> regards Simon
>
> On 8/7/06, hu andy <[EMAIL PROTECTED]> wrote:
> > Martin, Thank you for your reply.
> >
> > But the Lucene API said:
> > This is called in an inner search loop. For good search performance,
> > implementations of this method should not call
> > Searcher.doc(int)<
>
file:///E:/java/IR%20Library/lucene-1.9.1/lucene-1.9.1/docs/api/org/apache/lucene/search/Searcher.html#doc(int)>or
> > IndexReader.document(int)<
>
file:///E:/java/IR%20Library/lucene-1.9.1/lucene-1.9.1/docs/api/org/apache/lucene/index/IndexReader.html#document(int)>on
> > every document number encountered
> >
> > Because I have to check a field in the document to determine whether I
> > should return the document. The total number of documents is about two
> > hundred thousand. So I'm afraid the
> > performance
> >
> >
> > 2006/8/7, Martin Braun < [EMAIL PROTECTED]>:
> > >
> > > hi andy,
> > > > How can I use HitCollector to iterate over every returned document?
> > >
> > > You have to override the function collect for the HitCollector class and
> > > then store the retrieved Data in an array or map.
> > >
> > > Here is just a source-code scratch (is = IndexSearcher)
> > >
> > > is.search(query, null, new HitCollector(){
> > > public void collect(int
> docID, float score)
> > > {
> > > Document doc =
> is.doc(docID);
> > > titles[docID] =
> doc.get("title");
> > > }
> > > });
> > >
> > >
> > > hth,
> > > martin
> > >
> > >
> ---------------------------------------------------------------------
> > > 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]