Grant Ingersoll wrote:
I will try to take a crack at these, but not sure I know exactly what
you are looking for, so maybe others can chime in too.
At any rate, MultiSearcher has been around a lot longer (2001 versus
2004, or at least that is what the changelog seems to indicate) and it
works over Searchables, including RemoteSearchable. So you could use it
to combine results from remote searches as well, MultiReader can only
work over IndexReaders and I am not aware of any way that it can do
remote index reading, so there are different viable use cases for the two.
Really I just want to know the fastest mechanism for searching. Since I
don't use a RemoteSearcher, it sounds like using an IndexSearcher on a
MultiReader is the way to go.
2. Why doesn't the MultiReader implement the rather nice methods that
the MultiSearcher has (I'm thinking specifically of subSearcher(int)
and subDoc(int))?
I suppose subDoc might make sense, but subSearcher does not for a
Reader. Perhaps the private readerIndex() method on MultiReader is
something you are interested in? Is that getting at what you want?
Maybe you can submit a patch that makes readerIndex public if that is
what you are interested in?
Obviously the methods would have to be appropriately named :). It
sounds like some development work will have to be done on this then. I
have no problem doing it myself and submitting a patch (I can pick up
this discussion on the developer list when I have time), but for now is
it safe to assume that if I have the number of documents per IndexReader
and the order of the readers that I can calculate the "real" IndexReader
and the "real" docid for that sub-IndexReader? I realize I might not be
very clear, so lets see if I can re-state my example more clearly in
psedo-code (apologize in advance):
IndexReader r1 (size = 100 documents)
IndexReader r2 (size = 50 documents)
IndexReader r3 (size = 75 documents)
IndexReader[] readers = new IndexReader[] { r1, r2, r3 }
MultiReader mr = new MultiReader(readers)
// get docid in MultiReader
int docid = magicFindDocumentFunc(mr);
for (IndexReader r : readers) {
if (docid > r.numDocs()) {
docid -= r.numDocs()
}
else {
// r is the IndexReader that the desired Document
// docid's current value is lucene id of that Document within r
}
}
I know I can get the Document straight from the MultiReader but in my
case I need to know which exact IndexReader object the Document is
really coming from.
Thanks in advance for any help,
Kirk
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]