lucene-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Daniel Sanders" <dsand...@novell.com>
Subject Problem with Numeric range query.
Date Thu, 23 Sep 2010 19:22:44 GMT

I have a set of documents that all have a "timestamp" field which is stored as a long integer
number. The field is indexed in my Lucene index as a number using NumericField with a precision
step of 8: 

   Field field = new NumericField("timestamp", 8); 
   field.setLongValue( timestampValue); 

I do this so I can do numeric range queries to retrieve all documents that fall within a specific
time range. 

The query I construct has two parts to it, a query, and a filter. I get the document hits
as follows: 

   IndexReader reader = ...... some index reader..... 
   IndexSearcher searcher = new IndexSearcher(reader); 

   Filter filter = NumericRangeFilter.newLongRange("timestamp", 8, startTime, endTime, false,
true); 
   Query query = new MatchAllDocsQuery(); 
   searcher.search( query, filter, myCollector); // My collector is a super class of Collector
- saves all Hits 

Occasionally, I have a single document with a very specific timestamp I want to retrieve.
Suppose that timestamp is timeX, I will create the filter as follows: 

   Filter filter = NumericRangeFilter.newLongRange("timestamp", 8, timeX-1, timeX, false,
true); 

But with this filter, the document that should be found is never found. I have even tried
expanding the time range as follows, but with no success: 

   Filter filter = NumericRangeFilter.newLongRange("timestamp", 8, timeX-1, timeX+500, false,
true); 

Strangely, a filter that should NOT have found the document actually did find the document:


   Filter filter = NumericRangeFilter.newLongRange("timestamp", 8, timeX, timeX+1000, false,
true); 

This filter should NOT have found the document since the minInclusive argument is false. 

I have also noticed that sometimes when I have several documents with exactly the same timestamp,
a query will return some, but not all, of the documents. 

I have also tried to use a NumericRangeQuery as follows: 

   Query query = NumericRangeQuery.newLongRange("timestamp", 8, timeX-1, timeX, false, true);

   searcher.search( query, null, myCollector); 

This also fails to return my document(s). 

Am I doing something wrong here? Have I misunderstood how this is supposed to work? Has anyone
else had problems like this? 


Thanks for any help or guidance or tips you can give me, 

-Daniel Sanders 

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message