I use these calls in both cases. In score() and explain() I have the following code:
SortedNumericDocValues numDocVal = DocValues.getSortedNumeric(reader, fieldName); if (numDocVal != null && numDocVal.advanceExact(topList.doc)) { long val = numDocVal.nextValue(); .. } I reuse the same DisiPriorityQueue of scorers in score() and explain(). On Mon, Feb 19, 2018 at 6:54 PM, Adrien Grand <jpou...@gmail.com> wrote: > If you want to read the values again, you need to call setDocument (Lucene > < 7.0) or advanceExact (Lucene >= 7.0) before calling nextValue(). > > Le lun. 19 févr. 2018 à 14:41, Vadim Gindin <vgin...@detectum.com> a > écrit : > > > Hi all > > > > I use DocValue for scoring function. I.e. I have some column with > integers, > > that are used in scoring formula. So I have a scorer that calculates > > scoring function twice: > > - in score() > > - in explain() > > > > I got the following error in explain: > > > > Caused by: java.lang.IndexOutOfBoundsException > > at java.nio.Buffer.checkIndex(Buffer.java:540) ~[?:1.8.0_161] > > at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:253) > > ~[?:1.8.0_161] > > at > > org.apache.lucene.store.ByteBufferGuard.getByte( > ByteBufferGuard.java:118) > > ~[lucene-core-7.1.0.jar:7.1.0 84c90ad2c0218156c840e19a64d72b8a38550659 - > > ubuntu - 2017-10-13 16:12:42] > > at > > > > org.apache.lucene.store.ByteBufferIndexInput$SingleBufferImpl.readByte( > ByteBufferIndexInput.java:385) > > ~[lucene-core-7.1.0.jar:7.1.0 84c90ad2c0218156c840e19a64d72b8a38550659 - > > ubuntu - 2017-10-13 16:12:42] > > at > > > > org.apache.lucene.util.packed.DirectReader$DirectPackedReader8.get( > DirectReader.java:145) > > ~[lucene-core-7.1.0.jar:7.1.0 84c90ad2c0218156c840e19a64d72b8a38550659 - > > ubuntu - 2017-10-13 16:12:42] > > at > > > > org.apache.lucene.codecs.lucene70.Lucene70DocValuesProducer$3.longValue( > Lucene70DocValuesProducer.java:481) > > ~[lucene-core-7.1.0.jar:7.1.0 84c90ad2c0218156c840e19a64d72b8a38550659 - > > ubuntu - 2017-10-13 16:12:42] > > at > > > > org.apache.lucene.index.SingletonSortedNumericDocValues.nextValue( > SingletonSortedNumericDocValues.java:73) > > ~[lucene-core-7.1.0.jar:7.1.0 84c90ad2c0218156c840e19a64d72b8a38550659 - > > ubuntu - 2017-10-13 16:12:42] > > > > I've found the following comment in the source code of > > SortedNumericDocValues.java: > > > > /** > > * Iterates to the next value in the current document. Do not call > > this more than {@link #docValueCount} times > > * for the document. > > */ > > > > public abstract long nextValue() throws IOException; > > > > > > Questions: > > 1) Why I can't read the values twice? > > 2) How can I manage this situation? > > 3) Can it work for NumericDocValues? > > > > Regards, > > Vadim Gindin > > >