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]
