Hi Erick, I don't think that FieldSelector would be that valuable in my case because I just need to access a few fields, and those are all fields that are in fact stored (and indexed too). I was thinking of keeping this extra information in memory, precisely into an array mapping doc ids to the data structure. I see that this is done for ScoreDocComparator in a Lucene in Action example. I'm still not sure how to achieve something similar with a HitCollector. I mean, I could instantiate a maxDoc() size array and index it by the document ids that are passed to the collector. But that said, I don't know how to keep this array synchronized with the index. I've opened a new thread for this subject, "maxDoc and arrays".
Thank you again. Cheers, Carlos On 5/24/07, Erick Erickson <[EMAIL PROTECTED]> wrote:
You're on the right track. But that said, access to anything that's indexed (stored or not) should be pretty quick. Things stored, but not indexed, are costlier. This might drive your decision on what to index .vs. store..... Loading the document is anything like IndexReader.document(), or Hits.doc(). Part of the difference is that if you load the document, you get all the fields, whether you need them or not. Also, you can use your own TermEnum/TermDocs lookup for this kind of thing if the terms you're interested in are indexed... I wrote a mail some time ago that detailed my experience, in my situation with my peculiar data set that you may want to read, see... Lucene 2.1, using FieldSelector speeds up my app by a factor of 10+, As I mentioned in that message, I suspect that my improvement was *highly* dependent upon how the index is structured..... All that said, your notion of benchmarking is a very good one. It lead me to using FieldSelector in the first place... Best Erick On 5/24/07, Carlos Pita <[EMAIL PROTECTED] > wrote: > > Hi Erick, > > thank you for your prompt answer. What do you mean by loading the > document? > Accessing one of the stored fields? In that case I'm afraid I would need > to > do it. For example, in the aforementioned case of a result of products, I > have to look at any product store_id, which is stored along the document. > Is > this a performance killer? Maybe I should keep some tables in memory, for > example an array mapping from id to store_id in O(1). I will do some > benchmarking before anyway. > > Cheers, > Carlos > > On 5/24/07, Erick Erickson < [EMAIL PROTECTED]> wrote: > > > > I know of no way to alter the Hits behavior, I recommend using > > a TopDocs/TopDocCollector. > > > > But be aware that if you load the document for each one, you may incur > > a significant penalty, although the lazy-loading helped me a lot, see > > FieldSelector..... > > > > On 5/23/07, Carlos Pita <[EMAIL PROTECTED] > wrote: > > > > > > Hi folks, > > > > > > I need to collect some global information from my first 1000 search > > > results > > > in order to build up some search refining components containing only > > > relevant values (those which correspond to at least one of the first > > 1000 > > > hits). For example, the results are products and there is a store > filter > > > component that shows only the stores that sells a product between the > > > first > > > 1000 hits. So even if the user sees just the first 20, I would have to > > > inspect the first 1000. I've read that Hits mantains a cache of about > > 100 > > > or > > > 200 hits. Is this configurable? If I could set this cache to 1000 I > > would > > > then use Hits to browse the search results. Another way, I should use > > > HitCollector. What's your advice? > > > > > > TIA > > > Cheers, > > > Carlos > > > > > >