Part of my problem seems to be that the Range Query Object isn't acting as it should 
as per the FAQ and other mail list entries.
I'm using Lucene 1.2

I have a field in my index called DATE.  I'd like to do a date range search on it. I 
am using Strings in the format of yyyyMMdd.

I have the following dates in my Index:
20021105
20021126
20021113
20021115
20021103
20021125


When I use the follwing code to search, I get an exception:
*NOTE: I'm using the MultiFieldQueryParser becuase In some cases I check other field, 
I've simplified this one to demonstrate (and run my tests isolated from other factors)

       IndexSearcher search = new IndexSearcher("myindex");
       SimpleAnalyzer analyzer = new SimpleAnalyzer();
       String[] fields = new String[1];
       fields[0] = "DATE"
        
      String buff = "( DATE:[20021101 - 20021131] )";
      Query query = MultiFieldQueryParser.parse(buff, fields, analyzer);
      searcher.search(query);

I get the following error:
java.lang.IllegalArgumentException: At least one term must be non-null

if buff = "( DATE:20021101 - 20021131 )";
as well as
if buff = "( DATE:(20021101 - 20021131 ))";
I simply get no results.

I have added the date to the document by both
Field.Text("DATE", dateStr);
and
Field.Keyword("DATE", dateStr);

I have also tried to build the queries up creating Objects.  One of the things I 
notice is that if I use the RangeQuery Object there are no spaces on either side of 
the "-".

The documents which I created have the following Fields:
TITLE, DESCRIPTION and DATE.
If I search on TITLE or DESCRIPTION or a combination of both I get results just fine.

Am I doing something stupid, or is this a bug?  Seems to based on what I read that the 
example above where String buff = "( DATE:[20021101 - 20021131] )"; is correct and 
should work.

I published the complete source in an earlier posting called "Problem with Range".  It 
also contains a stack trace of the error.

Thanks in advance,
Michael


Reply via email to