用lucene建立索引然后搜索的时候,一般为文档的路径,文档名称,还有文档内容建立索引,但是一般文档内容是不存储的,如下代码所示doc.add(new Field("contents", new FileReader(files[i]));对文件的内容建立索引,但是不存储。这样子搜索完了之后怎么返回文件内容呢,无法返回文件内容。System.out.println(doc.get("contents"));返回的总是null;但是文档的内容很大,建立索引的时候不可能将文档的内容设置为存储的,那要怎么做才能返回文档的内容呢~??请各位大侠帮忙一下~~

解决方案 »

  1.   

    怎么不能存储。再大也可以存储,lucene的优点就是查找。
    创建了索引之后,用IndexSearch 和Query 借口去实现啊。。
      

  2.   

     Document document = new Document();   
                         Field FieldPath = new Field("path",path, 
                                 Field.Store.YES, Field.Index.NO);   
                         Field FieldBody = new Field("body", temp, Field.Store.YES,   
                                 Field.Index.ANALYZED,   
                                 Field.TermVector.WITH_POSITIONS_OFFSETS);
       
                         document.add(FieldPath);   
                         document.add(FieldBody);   
                         indexWriter.addDocument(document);   
    查询:QueryParser qp = new QueryParser(Version.LUCENE_30,"body", analyzer);   
    System.out.println("contents:"+document.get("body"));这样应该可以啊
      

  3.   

    上面的temp就是文档解析出来的内容String
      

  4.   

    我明白您的意思,可是我的问题就是在这边。
    我的文档是一个文件夹里的多个txt文档,而且每个文档都很大,都有300多M,这个temp该怎么表示呢?这个temp还是string类型的。我用下面的代码读取,但是会出现内存溢出的情况,不能实现呢。
    FileInputStream fis = new FileInputStream(files[i]);  
             String content = "";  
             BufferedReader reader = new BufferedReader(new InputStreamReader(fis));  
               
             StringBuffer buffer = new StringBuffer("");  
             content = reader.readLine();  
             while (content != null) {  
                 buffer.append(content);  
                 content = reader.readLine();  
             }  
             doc.add(new Field("content",buffer.toString(),Field.Store.YES,Field.Index.ANALYZED));麻烦您再指教一下,谢谢啦~~