lucene-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Savia Beson <eks...@googlemail.com>
Subject Re: how to get max value of a long field?
Date Fri, 17 May 2013 11:22:52 GMT
 should't there be a  way to do it efficiently for any indexed field (even max in byte order)?
Term dict is sorted 



On May 17, 2013, at 12:08 PM, "Uwe Schindler" <uwe@thetaphi.de> wrote:

> Hi,
> 
> Depending on the distinct number of actual values, it might be better to iterate over
the term dictionary and not index as doc-values. The lowest value is easy to get, just seek
to the first term in the dictionary. The last term is unfortunately not so easy to get, you
have to iterate the term dictionary until you reach the last term.
> 
> Uwe
> 
> -----
> Uwe Schindler
> H.-H.-Meier-Allee 63, D-28213 Bremen
> http://www.thetaphi.de
> eMail: uwe@thetaphi.de
> 
> 
>> -----Original Message-----
>> From: Adrien Grand [mailto:jpountz@gmail.com]
>> Sent: Friday, May 17, 2013 11:36 AM
>> To: java-user@lucene.apache.org
>> Subject: Re: how to get max value of a long field?
>> 
>> Hi,
>> 
>> On Fri, May 17, 2013 at 11:10 AM, Hu Jing <huj.nju@gmail.com> wrote:
>>> I want to know the max value of a long field.
>>> I read lucene api , but don't find any api about this?
>>> does someone can supply any hits about how to implement this.
>> 
>> To do this efficiently, your field needs to have doc values[1].
>> 
>> First, iterate over your DirectoryReader leaves[2]. Then for every
>> AtomicReaderContext.reader(), get a NumericDocValues instance for your
>> field[3]. Then iterate over the values to compute the maximum value:
>> 
>>    IndexReader rd;
>>    long max = Long.MIN_VALUE;
>>    for (AtomicReaderContext ctx : rd.leaves()) {
>>      final NumericDocValues longs =
>> ctx.reader().getNumericDocValues("my_long_field");
>>      final Bits liveDocs = ctx.reader().getLiveDocs();
>>      for (int i = 0; i < ctx.reader().maxDoc(); ++i) {
>>        if (liveDocs != null || liveDocs.get(i)) {
>>          max = Math.max(max, longs.get(i));
>>        }
>>      }
>>    }
>> 
>> [1]
>> http://lucene.apache.org/core/4_3_0/core/org/apache/lucene/document/
>> NumericDocValuesField.html
>> [2]
>> http://lucene.apache.org/core/4_3_0/core/org/apache/lucene/index/Index
>> Reader.html#leaves()
>> [3]
>> http://lucene.apache.org/core/4_3_0/core/org/apache/lucene/index/Atomi
>> cReader.html#getNumericDocValues(java.lang.String)
>> 
>> --
>> Adrien
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
>> For additional commands, e-mail: java-user-help@lucene.apache.org
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
> For additional commands, e-mail: java-user-help@lucene.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org


Mime
View raw message