首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Lucene 3.5 代码片断

2012-12-21 
Lucene 3.5 代码片段创建index/**p描述:使用最新版Lucene3.5.0的代码示例。/pp功能:搜索指定文件夹下

Lucene 3.5 代码片段

创建index

/**<p>描述:使用最新版Lucene3.5.0的代码示例。</p><p>功能:搜索指定文件夹下的html文件,创建索引。</p> * V Lucene 3.5 * 创建索引 */public static void createIndex(){File indexDir = new File(LUCENEINDEX);File dataDir = new File(LUCENEDATA);Analyzer luceneAnalyzer = new StandardAnalyzer(Version.LUCENE_35);File[] dataFiles = indexDir.listFiles();IndexWriter indexWriter = null;try {/** * indexWriter= new IndexWriter(SimpleFSDirectory.open(dataDir),luceneAnalyzer, true,IndexWriter.MaxFieldLength.LIMITED); * 在最新版中这种方式已被不使用。 * 现在使用下面的方式创建indexWriter */IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LUCENE_35, luceneAnalyzer);indexWriter= new IndexWriter(SimpleFSDirectory.open(dataDir), indexWriterConfig);long startTime = new Date().getTime();//注意:filed实例在多次添加的时候可以重用,节约构造field实例的时间。            Field f1 = new Field("name", "", Field.Store.YES, Field.Index.NOT_ANALYZED) ;            Field f2 = new Field("path", "", Field.Store.YES, Field.Index.NOT_ANALYZED) ;                        List<FilePojo> result = tree(indexDir);            for (FilePojo po : result) {                String name = po.getName();                String path = po.getPath();                try {System.out.println("Indexing file: " + path);Document doc = new Document();f1.setValue(name);doc.add(f1);f2.setValue(path);doc.add(f2);indexWriter.addDocument(doc);} catch (IOException e) {e.printStackTrace();}            }//查看IndexWriter里面有多少个索引System.out.println("numDocs:"+indexWriter.numDocs());indexWriter.commit();long endTime = new Date().getTime();System.out.println("耗时:" + (endTime - startTime));} catch (CorruptIndexException e) {e.printStackTrace();} catch (LockObtainFailedException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally{try {indexWriter.close();} catch (CorruptIndexException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}

?搜索index

?

/** * V Lucene 3.5 * 搜索索引 */public static void readIndex(){IndexSearcher indexSearch = null;try {//保存索引文件的地方   Directory dir = new SimpleFSDirectory(new File(LUCENEDATA));  /**  * indexSearch = new IndexSearcher(dir);<被弃用>  */ indexSearch = new IndexSearcher(IndexReader.open(dir));  //创建QueryParser对象,第一个参数表示Lucene的版本,第二个表示搜索Field的字段,第三个表示搜索使用分词器   QueryParser queryParser = new QueryParser(Version.LUCENE_35,           "name", new StandardAnalyzer(Version.LUCENE_35));  String key = "tESt.html"; //生成Query对象   Query query = queryParser.parse(key);  /**  * 搜索结果 TopDocs里面有scoreDocs[]数组,里面保存着索引值  * API: Finds the top n  hits for query  */ TopDocs hits = indexSearch.search(query, 10); //hits.totalHits表示一共搜到多少个 System.out.println("共搜索到"+hits.totalHits+"个 '"+key+"'");  //循环hits.scoreDocs数据,并使用indexSearch.doc方法把Document还原,再拿出对应的字段的值   for (ScoreDoc sdoc : hits.scoreDocs) {       Document doc = indexSearch.doc(sdoc.doc);       System.out.println(doc.get("path"));               } indexSearch.close();} catch (CorruptIndexException e) {e.printStackTrace();} catch (IOException e) {System.out.println("There is no index files...");} catch (ParseException e) {e.printStackTrace();}}

?

其他示例:

?

http://liuzidong.iteye.com/blog/1316940

?

?

?

?

?

?

?

?

?

热点排行