日期:2014-05-19 浏览次数:21040 次
public void creatIndex()throws Exception {
String dataPath = CmsContext.projectPath+PropertiesUtil.getProperty("lucene_source_dir");
String indexPath = CmsContext.projectPath +PropertiesUtil.getProperty("lucene_index_dir");
int i = 0 ;
File indexDir = new File(indexPath);//索引存储目录
File dir = new File(dataPath);// 待索引的数据文件目录
Analyzer analyzer = null;// 采用的分词器
FSDirectory directory = null;
IndexWriter iwriter = null;
FileInputStream fis = null;
BufferedReader reader = null;
try{
if(!indexDir.exists())//如果不存在索引目录,则建立此目录
indexDir.mkdirs();
analyzer = new IKAnalyzer();
directory = FSDirectory.open(indexDir);//打开目录
iwriter = new IndexWriter(directory,
analyzer, true, IndexWriter.MaxFieldLength.LIMITED);//索引生成器
List<File> files = new ArrayList<File>();
FileUtil.getAllFiles(files, dir.getAbsolutePath());//获得目录下所有的文件,不包括文件夹
for (File file:files) {
if(file.isFile()){
Document doc = new Document();
fis = new FileInputStream(file);
String content = "";
reader = new BufferedReader(new InputStreamReader(fis,PropertiesUtil.getProperty("static_charset")));//需要加上编码方式,否则中文都为乱码
StringBuffer buffer = new StringBuffer("");
content = reader.readLine();
while (content != null) {
buffer.append(content);
content = reader.readLine();
}
String html = buffer.toString();
String title = Util.fetchContentByTag(html, "title");
String filePath = file.getPath().replace(CmsContext.projectPath,CmsContext.webCtx).replace("\\", "/");
doc.add(new Field("title", (title==null?file.getName():title), Field.Store.YES, Field.Index.ANALYZED));
doc.add(new Field("path", filePath, Field.Store.YES, Field.Index.ANALYZED));
doc.add(new Field("content", html2Text(html), Field.Store.YES, Field.Index.ANALYZED));
doc.add(new Field("time", Util.date2str(new Date(file.lastModified()), "yyyy-MM-dd"), Field.Store.YES, Field.Index.ANALYZED));
iwriter.addDocument(doc);
i++;
}
}
}catch(Exception e){throw e;}
finally
{
if(reader!=null)reader.close();
if(fis!=null)fis.close();
if(iwriter!=null){
iwriter.optimize();
iwriter.close();
}
if(directory!=null)directory.close();
if(analyzer!=null)analyzer.close();
}
}
public JSONObject searchIndex(String key, String luceneIndexDir)
throws Exception {
JSONObject obj = new JSONObject();
JSONArray aryJson = new JSONArray();
Directory dir = null;
IndexSearcher search = null;
Analyzer analyzer = null;
try{
File indexDir = new File(luceneIndexDir);
dir = FSDirectory.open(indexDir);
search = new IndexSearcher(dir,true);//read-only
Term term = new Term("content", key);
Quer