You’re dealing with cases where the document in question doesn’t have a value in the iterator. So `advance(doc)` will return a docId greater than doc, as it moves to the next doc that does have a value, and `advanceExact(doc)` returns `false` because you can’t do an exact advance to a value that doesn’t exist.
> On 28 Feb 2020, at 01:05, Sergio Bilello <lapostadiser...@gmail.com> wrote: > > I changed the code to return a default value instead of an exception. In case > the doc will not be found. > I would like really to understand better why we have such comment in that > iterator > > * Returns the numeric value for the current document ID. * It is illegal >> to call this method after {@link #advanceExact(int)} * returned {@code >> false}. * @return numeric value* > > and if I use advance method instead of advanceExact the subsequent call to > retrieve the value would be legit? > > Thanks > Sergio > On 2020/02/27 22:27:09, Sergio <lapostadiser...@gmail.com> wrote: >> Hi guys! >> >> I am a newbie and I am trying to upgrade from Lucene 6.2.1 to 8.4.1 >> The previous code was leveraging this >> https://github.com/apache/lucene-solr/blob/releases/lucene-solr/6.2.1/lucene/core/src/java/org/apache/lucene/index/NumericDocValues.java#L34 >> >> now >> >> https://github.com/apache/lucene-solr/blob/releases/lucene-solr/8.4.1/lucene/core/src/java/org/apache/lucene/index/NumericDocValues.java#L32-L35 >> >> Previously there was no need to deal with the iterator and I found in the >> code a comment regarding >> >> >> >> ** Returns the numeric value for the current document ID. * It is illegal >> to call this method after {@link #advanceExact(int)} * returned {@code >> false}. * @return numeric value* >> If the below snippet is not correct how should I proceed? >> >> public static float >> getFloatValueFromNumericDocValuesAndDocId(NumericDocValues >> numericDocValues, int docId) throws IOException { >> if (numericDocValues.advanceExact(docId)) { >> return Float.intBitsToFloat((int)numericDocValues.longValue()); >> } else { >> throw new RuntimeException("It has not been possible to >> advanceExact for " + docId) ; >> } >> } >> >> public static int >> getIntValueFromNumericDocValuesAndDocId(NumericDocValues >> numericDocValues, int docId) throws IOException { >> if (numericDocValues.advanceExact(docId)) { >> return (int) numericDocValues.longValue(); >> } else { >> throw new RuntimeException("It has not been possible to >> advanceExact for " + docId) ; >> } >> } >> >> public static long >> getLongValueFromNumericDocValuesAndDocId(NumericDocValues >> numericDocValues, int docId) throws IOException { >> if (numericDocValues.advanceExact(docId)) { >> return numericDocValues.longValue(); >> } else { >> throw new RuntimeException("It has not been possible to >> advanceExact for " + docId) ; >> } >> } >> >> public static BytesRef >> getBytesRefValueFromSortedDocValuesAndDocId(SortedDocValues >> numericDocValues, int docId) throws IOException { >> if (numericDocValues.advanceExact(docId)) { >> return numericDocValues.binaryValue(); >> } else { >> throw new RuntimeException("It has not been possible to >> advanceExact for " + docId) ; >> } >> } >> >> >> >> >> Thanks to everyone! >> >> Sergio >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org > For additional commands, e-mail: dev-h...@lucene.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org For additional commands, e-mail: dev-h...@lucene.apache.org