我正在將lucene 3.6搜索API集成到Java桌面應用程序中。 lucene系統使用文件系統目錄來存儲索引。 創建索引目錄,索引編寫器和向索引添加文檔的代碼。填充Lucene 3.6文件目錄索引
索引的數據是從德比數據庫中收集的。數據庫表 的字段作爲字段添加到lucene文檔中。因此數據庫表中的每一行都表示爲單個lucene文檔。
我的問題是,有沒有辦法檢查索引目錄,如果沒有用lucene文檔填充它,然後填充它。或跳過 重新填充指數,當它已經是人口。
創建索引文件的代碼。創建索引作家
public void createIndexWriter() throws IOException, SQLException
{
indexDir = createIndexDir();
if(iw == null)
{
try {
// create some index
StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_36);
IndexWriterConfig IWConfig = new IndexWriterConfig(Version.LUCENE_36, analyzer);
iw = new IndexWriter(FSDirectory.open(indexDir), IWConfig);
}
catch (CorruptIndexException ex) {
Logger.getLogger(Indexer.class.getName()).log(Level.SEVERE, null, ex);
} catch (LockObtainFailedException ex) {
Logger.getLogger(Indexer.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Indexer.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
這
public File createIndexDir() throws IOException, SQLException
{
//Check if directory exist
if(!userDir.exists())
{ userDir.mkdir();
System.out.println(" Index directory created at " + userDir.getAbsolutePath());
}
return userDir.getAbsoluteFile();
}
代碼是從數據庫
public void buildIndex() throws SQLException, CorruptIndexException, IOException
{
/* Connecting to the database */
Connection con = DriverManager.getConnection(host, uName, uPass);
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
String sql = "SELECT * FROM APP.REGISTRY";
ResultSet rs = stmt.executeQuery(sql);
rs.beforeFirst(); //set poinyrt to begining of result set
while(rs.next())
{
Document doc = new Document();
doc.add(new Field("id",rs.getString("ID"),Field.Store.YES,Field.Index.NO));
if(rs.getString("SUBJECT")== null)
{ doc.add(new Field("subject","",Field.Store.YES,Field.Index.ANALYZED)); }
else {
doc.add(new Field("subject",rs.getString("SUBJECT"),Field.Store.YES,Field.Index.ANALYZED));
}
if(rs.getString("LETTER_FROM")== null)
{ doc.add(new Field("letter_from"," ",Field.Store.YES,Field.Index.ANALYZED)); }
else {
doc.add(new Field("letter_from",rs.getString("LETTER_FROM"),Field.Store.YES,Field.Index.ANALYZED));
}
doc.add(new Field("date_of_letter",DateTools.dateToString(rs.getDate("DATE_OF_LETTER"),
DateTools.Resolution.DAY),Field.Store.YES,Field.Index.ANALYZED));
doc.add(new Field("date_received",DateTools.dateToString(rs.getDate("DATE_RECEIVED"),
DateTools.Resolution.DAY),Field.Store.YES,Field.Index.NO));
if(rs.getString("REMARKS")== null)
{ doc.add(new Field("remarks"," ",Field.Store.YES,Field.Index.ANALYZED)); }
else {
doc.add(new Field("remarks",rs.getString("REMARKS"),Field.Store.YES,Field.Index.ANALYZED)); }
if(rs.getDate("DATE_DISPATCHED")== null)
{ doc.add(new Field("date_dispatched",DateTools.dateToString(new Date(0L),DateTools.Resolution.DAY),Field.Store.YES,Field.Index.ANALYZED)); }
else {
doc.add(new Field("date_dispatched",DateTools.dateToString(rs.getDate("DATE_DISPATCHED"),
DateTools.Resolution.MINUTE),Field.Store.YES,Field.Index.ANALYZED));
}
if(rs.getString("OFFICE_DISPATCHED_TO")== null)
{ doc.add(new Field("office_dispatched_to"," ",Field.Store.YES,Field.Index.ANALYZED));}
else {
doc.add(new Field("office_dispatched_to",rs.getString("OFFICE_DISPATCHED_TO"),Field.Store.YES,Field.Index.ANALYZED));
}
iw.addDocument(doc);
}
iw.commit();
closeIndexWriter();
stmt.close();
rs.close();
con.close();
}
任何想法的解決方案填充了數據的索引文件的代碼。 爲所有人歡呼。
請定義人口..你想如何處理人口稠密的情況? – phani 2013-05-10 16:41:30
抱歉填充我的意思是創建字段和文檔並將它們添加到lucene索引。 – CodeAngel 2013-05-10 17:17:17