是这样的,我要索引数据库的数据,,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();