当前位置:首页 > 开发 > 系统架构 > 架构 > 正文

lucene入门实例一(写索引)

发表于: 2012-09-25   作者:blackproof   来源:转载   浏览次数:
摘要: copy一个 lucene in action 的入门实例代码:       import java.io.File; import java.io.FileFilter; import java.io.FileReader; import java.io.IOException; import org.apache.lucene.analysis

copy一个 lucene in action 的入门实例代码:

 

 

 

import java.io.File;
import java.io.FileFilter;
import java.io.FileReader;
import java.io.IOException;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.FieldSelectorResult;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;

public class Index {
	public static void main(String[] args) throws Exception {
		String indexDir = "F:\\workspace\\JavaDemo\\src\\com\\s\\lucene\\index";//存储lucene索引的文件夹
		String dataDir = "F:\\workspace\\JavaDemo\\src\\com\\s\\lucene";//lucene源文件
		
		long start = System.currentTimeMillis();
		Index indexer = new Index(indexDir);//初始化indexWriter
		int numIndexed;
		try{
			numIndexed = indexer.index(dataDir, new TextFilesFilter());//创建索引
		}finally{
			indexer.close();
		}
		
		long end = System.currentTimeMillis();
		System.out.println(end-start);
	}
	
	private IndexWriter writer;
	
	public Index(String indexDir) throws IOException{
		Directory dir = FSDirectory.open(new File(indexDir));//创建索引文件夹
		//创建索引writer 也可以根据IndexWriterConfig创建
		writer = new IndexWriter(dir, new StandardAnalyzer(Version.LUCENE_30), IndexWriter.MaxFieldLength.UNLIMITED);
	}
	
	public void close() throws IOException{
		writer.close();
	}
	
	public int index(String dataDir,FileFilter filter) throws Exception{
		File[] files = new File(dataDir).listFiles();//列出源文件
		
		for (File f : files) {
			if(!f.isDirectory() && filter.accept(f)){
				indexFile(f);//遍历源文件,创建索引
			}
		}
		return writer.numDocs();
	}
	
	public static class TextFilesFilter implements FileFilter{
		public boolean accept(File path){
			return path.getName().toLowerCase().endsWith(".txt");
		}
	}
	
	protected Document getDocument(File f) throws Exception{
		Document doc = new Document();
		doc.add(new Field("contents",new FileReader(f)));//内容
		doc.add(new Field("filename",f.getName(),
				Field.Store.YES,Field.Index.NOT_ANALYZED));//文件名
		doc.add(new Field("fullpath",f.getCanonicalPath(),
				Field.Store.YES,Field.Index.NOT_ANALYZED)); //文件全路径
		return doc;
	}
	
	private void indexFile(File f) throws Exception{
		Document doc = getDocument(f);//创建document
		writer.addDocument(doc);//添加document到索引
	}
	
	
}

lucene入门实例一(写索引)

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
学习Lucene有两周时间,现就这两周的学习做一个简单小结,写了一个入门级别的实例,如下面所示; 小
学习了两星期的Lucene,对它的基础知识有了一定的掌握,并开发了自己的常搜吧项目。下面展示下我的
前段时间对Lucene.NET做了一些研究,当然也是比较浅显的研究。感觉学到了一些东西,所以写出来跟大
花了小半天的时间研究了一下Lucene全文检索引擎的使用,看网上的教程动辄十几章着实吓人,想起来N年
前段时间对Lucene.NET做了一些研究,当然也是比较浅显的研究。感觉学到了一些东西,所以写出来跟大
Lucene更新实在太快了,只好紧跟脚步开始学习Lucene5,花了点时间写了一个demo,就是程序根据用户提
Lucene更新实在太快了,只好紧跟脚步开始学习Lucene5,花了点时间写了一个demo,就是程序根据用户提
http://www.haogongju.net/art/1886956 Lucene 简介 Lucene 是一个基于 Java 的全文信息检索工具包
基本概念: 前期准备: lucene-2.4.0 junit4.9 实例代码: package com.ln.ydc.lucene.test; import
Lucene 简介 Lucene 是一个基于 Java 的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号