Ok this makes sense. I suspect I never ran across this before because I always accessed the ord through the context before getting the reader.
Joel Bernstein http://joelsolr.blogspot.com/ On Sun, Dec 27, 2020 at 1:10 PM Uwe Schindler <[email protected]> wrote: > Hi, > > > > that behaviour is fully correct and was always like that. Just for info (I > had some slides on berlinbuzzwords like 8.5 years ago): > > https://youtu.be/iZZ1AbJ6dik?t=1975 > > > > The problem is a classical “wrong point of view” problem! > > > > IndexReaders and their subclasses have no idea about their neighbours or > parents, they can always be used on their own. They can also be in multiple > contexts (!!!!), like a LeafReader (in that talk we used AtomicReader) is > part of a DirectoryReader but at same time somebody else has constructed > another composite reader with LeafReaders from totally different > directories (e.g., when merging different indexes together). So in short: A > reader does not know anything about its own “where I am”. > > > > The method getContext() is only there as a helper method (it’s a bit > misnomed), to create a **new** context that describes this reader as the > only one in it, so inside this new context it has an ord of 0. > > > > The problem in your code is: you dive down through the correct context > from top-level (the top context is from the point of view of the > SolrSearcher), but then you leave this hierarchy by calling reader(). At > that point you lost context information. After that you get a new context > and this one returns 0, because its no longer form SolrIndexSearcher’s > point of view, but its own PoV. > > > > Replace: leaves.get(5).reader().getContext().ord > > By: leaves.get(5).ord > > > > And you’re fine. The red part leaves the top level context and then > creates a new one – an then you’re lost! > > > > Uwe > > > > ----- > > Uwe Schindler > > Achterdiek 19, D-28357 Bremen > > https://www.thetaphi.de > > eMail: [email protected] > > > > *From:* Joel Bernstein <[email protected]> > *Sent:* Sunday, December 27, 2020 5:59 PM > *To:* lucene dev <[email protected]> > *Subject:* LeafReaderContext ord is unexpectedly 0 > > > > I ran into this while writing some Solr code today. > > > > List<LeafReaderContext> leaves = > req.getSearcher().getTopReaderContext().leaves(); > > > > The req is a SolrQueryRequest object. > > > > Now if I do this: > > > > leaves.get(5).reader().getContext().ord > > > > I would expect *ord* in this scenario to be *5*. > > > > But in my testing in master it's returning 0. > > > > It seems like this is a bug. Not sure yet if this is a bug in Sor or > Lucene. Am I missing anything here that anyone can see? > > > > > Joel Bernstein > > http://joelsolr.blogspot.com/ >
