日期:2014-05-20  浏览次数:20699 次

lucene索引搜索
是这样的,我要索引数据库的数据,,xml文件中的。我想利用lucene对所有XML文件进行全文搜索,比如一个学生库,输入学生ID后,能够找出所有与这个姓名相关的所有信息,查询结果能像数据库中查询到的记录一样。

初识lucene,看过网上很多相关介绍与使用,到现在还不清楚lucene能否满足我这样的需求,发送到gad1989@sina.com望各位网上朋友指点一二!谢谢了。


------解决方案--------------------
本人也初学lucene,楼主所说功能肯定可以实现。我的思路是这样,用dom4j解析所有xml,对需要搜索的字段或属性,建立索引,就行了。索引建立只需进行一次,除非xml内容有新增,则需对已建立的索引进行增量或重建。
有不对望大神们补充 - -
------解决方案--------------------
这个读取文件夹内txt文件建立索引的示例:
Java code
//定义存放索引的目录 。
         File   indexDir = new File("D:\\luceneIndex"); 
         //测试用法的一种,对目录中的txt文件的内容进行索引,供查询。 
         File   dataDir  = new File("D:\\luceneData");
         
         //确定分词的实现方法。这是Lucene自带的分词器
         //Analyzer writerAnalyzer = new SimpleAnalyzer(Version.LUCENE_33);
         //庖丁解牛  建立中文分词解析
         Analyzer writerAnalyzer = new PaodingAnalyzer();
         //
         IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LUCENE_33, writerAnalyzer);
         //设定是对索引增量,还是新建索引。
         indexWriterConfig.setOpenMode(OpenMode.CREATE);
         //索引写入流
         IndexWriter indexWriter = new IndexWriter(FSDirectory.open(indexDir),indexWriterConfig);
         
         File[] dataFiles  = dataDir.listFiles(); 
         long startTime = new Date().getTime(); 
         for(int i = 0; i < dataFiles.length; i++){ 
              if(dataFiles[i].isFile() && dataFiles[i].getName().endsWith(".txt")){
                   System.out.println("Indexing file " + dataFiles[i].getCanonicalPath()); 
                   Document document = new Document(); 
                   FileInputStream fileInputStream = new FileInputStream(dataFiles[i]);
                   InputStreamReader reader =   new   InputStreamReader(fileInputStream,"GBK");
                   
                   document.add(new Field("path",dataFiles[i].getCanonicalPath(),Field.Store.YES,Field.Index.ANALYZED));
                   document.add(new Field("filename",dataFiles[i].getName(),Field.Store.YES,Field.Index.ANALYZED,TermVector.WITH_POSITIONS_OFFSETS));
                   document.add(new Field("contents",reader,TermVector.WITH_POSITIONS_OFFSETS));
                   indexWriter.addDocument(document); 
              } 
         }
         //对IndexWriter进行优化
         indexWriter.optimize(); 
         indexWriter.close();