我正在使用Lucene 3.6在Java中進行應用程序,並且想要增加一個速率。 我已經創建了索引,並且我讀到了您要做的是打開現有索引,並檢查每個文檔索引和文檔修改日期,以查看它們是否有所不同,刪除索引文件並重新添加。 我的問題是我不知道如何在Java Lucene中做到這一點。增量索引lucene
感謝
我的代碼是:
public static void main(String[] args)
throws CorruptIndexException, LockObtainFailedException,
IOException {
File docDir = new File("D:\\PRUEBASLUCENE");
File indexDir = new File("C:\\PRUEBA");
Directory fsDir = FSDirectory.open(indexDir);
Analyzer an = new StandardAnalyzer(Version.LUCENE_36);
IndexWriter indexWriter
= new IndexWriter(fsDir,an,MaxFieldLength.UNLIMITED);
long numChars = 0L;
for (File f : docDir.listFiles()) {
String fileName = f.getName();
Document d = new Document();
d.add(new Field("Name",fileName,
Store.YES,Index.NOT_ANALYZED));
d.add(new Field("Path",f.getPath(),Store.YES,Index.ANALYZED));
long tamano = f.length();
d.add(new Field("Size",""+tamano,Store.YES,Index.ANALYZED));
long fechalong = f.lastModified();
d.add(new Field("Modification_Date",""+fechalong,Store.YES,Index.ANALYZED));
indexWriter.addDocument(d);
}
indexWriter.optimize();
indexWriter.close();
int numDocs = indexWriter.numDocs();
System.out.println("Index Directory=" + indexDir.getCanonicalPath());
System.out.println("Doc Directory=" + docDir.getCanonicalPath());
System.out.println("num docs=" + numDocs);
System.out.println("num chars=" + numChars);
}
感謝Edmondo1984,你幫助了我很多。
最後我做了如下所示的代碼。存儲文件的散列,然後檢查修改日期。
9300索引文件需要15秒,重新索引(沒有任何索引沒有更改,因爲沒有文件)需要15秒。 我做錯了什麼或我可以優化代碼以減少?
感謝jtahlborn,做了我設法平衡indexReader時間來創建和更新。你不應該更新現有的索引應該更快地重新創建嗎?是否有可能進一步優化代碼?
if(IndexReader.indexExists(dir))
{
//reader is a IndexReader and is passed as parameter to the function
//searcher is a IndexSearcher and is passed as parameter to the function
term = new Term("Hash",String.valueOf(file.hashCode()));
Query termQuery = new TermQuery(term);
TopDocs topDocs = searcher.search(termQuery,1);
if(topDocs.totalHits==1)
{
Document doc;
int docId,comparedate;
docId=topDocs.scoreDocs[0].doc;
doc=reader.document(docId);
String dateIndString=doc.get("Modification_date");
long dateIndLong=Long.parseLong(dateIndString);
Date date_ind=new Date(dateIndLong);
String dateFichString=DateTools.timeToString(file.lastModified(), DateTools.Resolution.MINUTE);
long dateFichLong=Long.parseLong(dateFichString);
Date date_fich=new Date(dateFichLong);
//Compare the two dates
comparedates=date_fich.compareTo(date_ind);
if(comparedate>=0)
{
if(comparedate==0)
{
//If comparation is 0 do nothing
flag=2;
}
else
{
//if comparation>0 updateDocument
flag=1;
}
}
你能在Java代碼中的javadoc?你不明白什麼?更具體地說... – Edmondo1984 2012-07-12 11:06:57
對不起,代碼已經設置 – 2012-07-13 09:57:43
該代碼是一些片段,從中你不會得到你想要的。你最好學習lucene是如何工作的,並且從零開始編寫它 – Edmondo1984 2012-07-16 06:08:38