Given a docId if I call advanceExact(docId) and if this will return true.

Can I call   
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
to retrieve the value?

If YES I am fine with it if NO what should I do to retrieve the value for the 
docId specified in case it exists?
I didn't get the meaning of the comment on top of the method advanceExact.

Separate question:
What's the purpose to call advance(doc) and eventually get a docId greater than 
doc?

Thanks,
Sergio

On 2020/02/28 11:04:45, Alan Woodward <[email protected]> wrote: 
> 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 <[email protected]> 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 <[email protected]> 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: [email protected]
> > For additional commands, e-mail: [email protected]
> > 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to