I am new to Lucene.  Last night I started writing a small prototype indexer
and search to become familiar with Lucene before I try to integrate it into
my application.  I believe I'm using Lucene correctly, however I can't
figure out why I'm getting the error I am.  I have tried searching through
the FAQ's and the mail archive.  I hate asking what is probably a stupid
question.

I'm getting the following error with the query shown:
Query :  ( DATE:[20021110 - 20021118] )  
java.lang.IllegalArgumentException: At least one term must be non-null

Here is the code sample I'm using and below that is the results I'm getting.
I left the two cases which worked in the output.  It's the third case that
I'm concerned about.

package lucenetest;

import org.apache.lucene.document.*;
import org.apache.lucene.analysis.*;
import org.apache.lucene.index.*;
import org.apache.lucene.search.*;
import org.apache.lucene.queryParser.*;

import java.util.*;


public class LuceneTest {
  private Map writerMap = new HashMap();
  private Map searcherMap = new HashMap();

  public LuceneTest() {}

  private IndexWriter getWriter(String name)throws Exception{
    if(!writerMap.containsKey(name)){
      writerMap.put(name, new IndexWriter(name, new SimpleAnalyzer(),
true));
    }
    return (IndexWriter)writerMap.get(name);
  }

  private Searcher getSearcher(String name)throws Exception{
    if(!searcherMap.containsKey(name)){
      searcherMap.put(name, new IndexSearcher(name));
    }
    return (Searcher)searcherMap.get(name);
  }

  public void addInfo(String indexName, String id, String title, String
description, String date)throws Exception{
    IndexWriter writer = getWriter(indexName);

    Document doc = new Document();
    doc.add(Field.UnIndexed("ID", id));
    doc.add(Field.Text("TITLE", title));
    doc.add(Field.Text("DESCRIPTION", description));
    doc.add(Field.Text("DATE", date));

    writer.addDocument(doc);

    writer.optimize();
  }

  public Hits find(String indexName, String title, String description,
String start, String end)throws Exception{
      Searcher searcher = getSearcher(indexName);
      Analyzer analyzer = new SimpleAnalyzer();
      String[] fields = null;
      ArrayList fieldList = new ArrayList();

      StringBuffer buff = new StringBuffer();
      if(title!=null){
        buff.append("(TITLE:");
        buff.append(title);
        buff.append(")");
        fieldList.add("TITLE");
      }
      if(description!=null){
        buff.append("(DESCRIPTION:");
        buff.append(description);
        buff.append(")");
        fieldList.add("DESCRIPTION");
      }
      if(start!=null || end!=null){
        buff.append(" ( DATE:[");
        buff.append(start);
        buff.append(" - ");
        buff.append(end);
        buff.append("] ) ");
        fieldList.add("DATE");
      }
      Object[] objs = fieldList.toArray();
      fields = new String[objs.length];
      for (int i = 0; i < objs.length; i++) {
        fields[i] = (String)objs[i];
      }

      System.out.println("Query : " + buff.toString());
      Query query = MultiFieldQueryParser.parse(buff.toString(), fields,
analyzer);

      return searcher.search(query);
  }

  public void showHits(Hits hits)throws Exception{
    for (int i = 0; i < hits.length(); i++) {
      System.out.println("Score = " +  hits.score(i) + " : Document = " +
hits.doc(i));
    }
    System.out.println("==");
    System.out.println("====================================");
    System.out.println("==");
  }

  public static void main(String[] args) {
    LuceneTest test = new LuceneTest();
    try{
      test.addInfo("myindex", "1", "This is a book about nothing", "It
really does not contains a damn thing worth mentioning.  Read it yourself",
"20021105");
      test.addInfo("myindex", "2", "This is a book about Something", "It
really does contains a something worth mentioning.  Read it yourself",
"20021126");
      test.addInfo("myindex", "3", "This is a book about Everything", "It
really does contains a everything worth mentioning.  Read it yourself",
"20021113");
      test.addInfo("myindex", "4", "Slim", "He's everything you'd ever want
in a developer", "20021115");
      test.addInfo("myindex", "5", "Slim Jim Shady", "I'm not so sure this
is the same guy but he is a developer", "20021103");
      test.addInfo("myindex", "6", "Slim Shady", "I know this is not the guy
but he too is a developer who know's everything", "20021125");

      test.showHits(test.find("myindex", "This", null, null, null));
      test.showHits(test.find("myindex", "This", "everything", null, null));
      test.showHits(test.find("myindex", null, null, "20021110",
"20021118"));

    }catch(Exception e){
      e.printStackTrace(System.out);
    }

    System.out.println("Done");
  }
}


=======RESULTS==========

Query : (TITLE:This)

Score = 0.5787209 : Document = Document<Unindexed<ID:1> Text<TITLE:This is a
book about nothing> Text<DESCRIPTION:It really does not contains a damn
thing worth mentioning.  Read it yourself> Text<DATE:20021105>>

Score = 0.5787209 : Document = Document<Text<DATE:20021126>
Text<DESCRIPTION:It really does contains a something worth mentioning.  Read
it yourself> Text<TITLE:This is a book about Something> Unindexed<ID:2>>

Score = 0.5787209 : Document = Document<Unindexed<ID:3> Text<TITLE:This is a
book about Everything> Text<DESCRIPTION:It really does contains a everything
worth mentioning.  Read it yourself> Text<DATE:20021113>>

==

====================================

==

Query : (TITLE:This)(DESCRIPTION:everything)

Score = 0.4458295 : Document = Document<Unindexed<ID:3> Text<TITLE:This is a
book about Everything> Text<DESCRIPTION:It really does contains a everything
worth mentioning.  Read it yourself> Text<DATE:20021113>>

Score = 0.12860465 : Document = Document<Unindexed<ID:1> Text<TITLE:This is
a book about nothing> Text<DESCRIPTION:It really does not contains a damn
thing worth mentioning.  Read it yourself> Text<DATE:20021105>>

Score = 0.12860465 : Document = Document<Text<DATE:20021126>
Text<DESCRIPTION:It really does contains a something worth mentioning.  Read
it yourself> Text<TITLE:This is a book about Something> Unindexed<ID:2>>

Score = 0.09920931 : Document = Document<Text<DATE:20021115>
Text<DESCRIPTION:He's everything you'd ever want in a developer>
Text<TITLE:Slim> Unindexed<ID:4>>

Score = 0.07593799 : Document = Document<Text<DATE:20021125>
Text<DESCRIPTION:I know this is not the guy but he too is a developer who
know's everything> Text<TITLE:Slim Shady> Unindexed<ID:6>>

==

====================================

==

Query :  ( DATE:[20021110 - 20021118] ) 

java.lang.IllegalArgumentException: At least one term must be non-null

        at org.apache.lucene.search.RangeQuery.<init>(Unknown Source)

        at org.apache.lucene.queryParser.QueryParser.getRangeQuery(Unknown
Source)

        at org.apache.lucene.queryParser.QueryParser.Term(Unknown Source)

        at org.apache.lucene.queryParser.QueryParser.Clause(Unknown Source)

        at org.apache.lucene.queryParser.QueryParser.Query(Unknown Source)

        at org.apache.lucene.queryParser.QueryParser.Clause(Unknown Source)

        at org.apache.lucene.queryParser.QueryParser.Query(Unknown Source)

        at org.apache.lucene.queryParser.QueryParser.parse(Unknown Source)

        at org.apache.lucene.queryParser.QueryParser.parse(Unknown Source)

        at org.apache.lucene.queryParser.MultiFieldQueryParser.parse(Unknown
Source)

        at lucenetest.LuceneTest.find(LuceneTest.java:80)

        at lucenetest.LuceneTest.main(LuceneTest.java:106)

Done


Thanks,
Michael

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to