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

Reply via email to