初次学lucene,遇到下面错误   请我是什么问题?搜索代码:/**
 * 搜索 
 * @param type  搜索的类型   content or path or filename
 * @param content  搜索的条件  
 * @param size  搜索数据的条数
 */
public void sercher(){
try {
//1、创建 Directory
 Directory directory = FSDirectory.open(new File("D:/lucene/index01")); //创建在硬盘中 
//2、创建 IndexReader  读取所有索引  
 IndexReader reader=IndexReader.open(directory);
//3、根据IndexReader 创建IndexSearcher
 IndexSearcher searcher=new IndexSearcher(reader);
//4、创建parser来确定 搜索文件的内容     第二个参数表示搜索的域  
 QueryParser parser=new QueryParser(Version.LUCENE_35, "content", new StandardAnalyzer(Version.LUCENE_35));
// 查询内容中包含参数 content的文档 
 Query query=parser.Query("java");  
//5、根据 searcher搜索并返回TopDocs
 TopDocs tds=searcher.search(query, 10); // 取10条数据
//6、根据TopDocs获取ScoreDoc对象
 ScoreDoc[] sds=tds.scoreDocs; //所有文档所存的id号
 for (ScoreDoc sd : sds) {
//7、根据searcher和 ScoreDoc获取具体的Document对象
Document d=searcher.doc(sd.doc);
//8、根据Document 对象 获取需要的值 
System.out.println(d.get("filename")+"["+d.get("path")+"]");
 }
    //9、关闭reader
     reader.close();
} catch (ParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}
org.apache.lucene.queryParser.ParseException: Encountered "<EOF>" at line 1, column 0.
Was expecting one of:
    <NOT> ...
    "+" ...
    "-" ...
    "(" ...
    "*" ...
    <QUOTED> ...
    <TERM> ...
    <PREFIXTERM> ...
    <WILDTERM> ...
    "[" ...
    "{" ...
    <NUMBER> ...
    <TERM> ...
    "*" ...
    
at org.apache.lucene.queryParser.QueryParser.generateParseException(QueryParser.java:1818)
at org.apache.lucene.queryParser.QueryParser.jj_consume_token(QueryParser.java:1700)
at org.apache.lucene.queryParser.QueryParser.Clause(QueryParser.java:1327)
at org.apache.lucene.queryParser.QueryParser.Query(QueryParser.java:1237)
at org.itat.test.HelloLucene.sercher(HelloLucene.java:99)
at org.itat.test.TestLucene.testSearcher2(TestLucene.java:26)
at org.itat.test.TestLucene.main(TestLucene.java:36)
lucenejava

解决方案 »

  1.   

    parser.Query("java");  你看看parser是否有一个parser方法 。 我记得好像是要用parser方法
      

  2.   


      QueryParser parser=new QueryParser(Version.LUCENE_35, "content", new StandardAnalyzer(Version.LUCENE_35));这不是么?
      

  3.   


    哦哦,我弄错了,是要parser 方法,谢谢你哦
      

  4.   


    代码没报错了,索引也创建成功了。但为什么没查出数据呢? D:/lucene/example 有A,B,C三个txt文档 A和B内容中包含java。奇怪....以下是我创建索引的方法:/**
     * 建立索引 
     */
    public void index(){
     IndexWriter writer=null;
     try {
    // 1、创建Directory; 创建索引库
    //Directory directory=new RAMDirectory();  // 创建在内存中
     Directory   directory=FSDirectory.open(new File("D:/lucene/index01")); //创建在硬盘中 
    // 2、创建IndexWriter 写索引 ;      StandardAnalyzer 分词器
     IndexWriterConfig iwc=new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35));
    writer=new IndexWriter(directory,iwc);
    // 3、创建Document 对象 
    Document doc=null;
    // 4、为Document添加field
    File f=new File("D:/lucene/example");
    // 遍历文档中的文件
    for (File file : f.listFiles()) {
    doc=new Document();
    // 获得文件内容;    new FileReader(file):读取一个文件
    doc.add(new Field("content", new FileReader(file)));  
    /* Field.Store.YES 是否把文件全名存在硬盘中  ;   Field.Index.NOT_ANALYZED) 是否进行分词
     * 获得文件名 (对于文件名没必要进行分词,它本身就是一个完整的词)
     */ 
    doc.add(new Field("filename", file.getName(),Field.Store.YES,Field.Index.NOT_ANALYZED)); 
    //获得文件路径 
    doc.add(new Field("path", file.getName(),Field.Store.YES,Field.Index.NOT_ANALYZED)); 
    // 5、通过IndexWriter添加文档到索引  
    writer.addDocument(doc);
    }
    } catch (CorruptIndexException e) {
    e.printStackTrace();
    } catch (LockObtainFailedException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }finally{
    if (writer !=null)
    try {
    // 关闭IndexWriter
    writer.close();
    } catch (CorruptIndexException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }

      

  5.   

    人家2楼 说的 要用   Query query =parser.parse("Java");