www.pudn.com > 200402121144312230.rar > DbSearchManager.java
package net.ijsp.news.search.database; /** *Title:
*Description:
*Copyright: Copyright (c) 2003
*Company:ijsp.net
* @author ccjsmile * @version 1.0 */ import org.apache.lucene.document.*; import org.apache.lucene.analysis.cn.*; import org.apache.lucene.analysis.*; import org.apache.lucene.analysis.standard.*; import org.apache.lucene.index.*; import org.apache.lucene.store.*; import java.io.*; import net.ijsp.news.search.SearchManager; import net.ijsp.news.news.News; import net.ijsp.news.database.LoadProp; public class DbSearchManager implements SearchManager { private boolean searchEnabled = true; private boolean busy = false; private boolean autoIndexEnabled = true; private static String indexPath = null; // 索引路径 protected static Analyzer analyzer = new ChineseAnalyzer(); // 中文检索 public boolean isSearchEnabled() { return searchEnabled; } public void setSearchEnabled(boolean searchEnabled) { this.searchEnabled = searchEnabled; } public boolean isBusy() { return busy; } public boolean isAutoIndexEnabled() { return autoIndexEnabled; } public synchronized void addToIndex(News news) { if (!searchEnabled) { return; } IndexWriter writer = null; try { writer = getWriter(false); addMessageToIndex(news.getNewsFile(),news.getTitle(),news.getContent(), Long.toString(news.getDate()),writer,news.getBoardID()); }catch (IOException ioe) { ioe.printStackTrace(); }finally{ try { writer.close(); }catch (Exception e) { } } } private static IndexWriter getWriter(boolean create) throws IOException { if (indexPath == null) { // 获取全文检索数据路径 LoadProp loadProp = new LoadProp(); loadProp = loadProp.prop(); indexPath = loadProp.getIndexPath(); } IndexWriter writer = null; if (create) { try { writer = new IndexWriter(indexPath, analyzer, true); }catch (Exception e) { System.err.println("ERROR: Failed to create a new index writer."); e.printStackTrace(); } } else { if (indexExists(indexPath)) { try { writer = new IndexWriter(indexPath, analyzer, false); }catch (Exception e) { System.err.println("ERROR: Failed to open an index writer."); e.printStackTrace(); } }else { try { writer = new IndexWriter(indexPath, analyzer, true); }catch (Exception e) { System.err.println("ERROR: Failed to create a new inex writer."); e.printStackTrace(); } } } return writer; } /** * 分析检索数据路径是否正确 */ private static boolean indexExists(String indexPath) { File segments = new File(indexPath + File.separator + "segments"); return segments.exists(); } /** * 将数据存入全文索引文件中 */ protected final void addMessageToIndex(String newsPath, String subject, String body, String creationDate, IndexWriter writer,int newsClass) throws IOException { if (writer == null) { return; } Document doc = new Document(); doc.add(Field.UnIndexed("newsPath",newsPath)); doc.add(Field.Text("subject", subject)); doc.add(Field.UnStored("body", body)); doc.add(new Field("creationDate",creationDate,false, true, false)); doc.add(new Field("newsClass", Integer.toString(newsClass), false, true, false)); writer.addDocument(doc); } }