关于用lucene搜索返回文档内容的一个问题~~急求答案~~

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

4 个解决方案

#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


引用 3 楼 zhaoli2315 的回复:
上面的temp就是文档解析出来的内容String

我明白您的意思,可是我的问题就是在这边。
我的文档是一个文件夹里的多个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));

麻烦您再指教一下,谢谢啦~~

#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


引用 3 楼 zhaoli2315 的回复:
上面的temp就是文档解析出来的内容String

我明白您的意思,可是我的问题就是在这边。
我的文档是一个文件夹里的多个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));

麻烦您再指教一下,谢谢啦~~