当前位置: 代码迷 >> Java相关 >> lucene索引搜索,该如何处理
  详细解决方案

lucene索引搜索,该如何处理

热度:4824   发布时间:2013-02-25 21:44:52.0
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();
  相关解决方案