2012-07-02 74 views
1

我正在使用Lucene.Net(版本2.9.4.1)實現簡單的搜索模塊。我想,如果使用下面的代碼在索引中存在刪除文件,無法刪除lucene索引中的現有文檔

var analyzer = new StandardAnalyzer(Version.LUCENE_29); 
var indexWriter = new IndexWriter(
    LuceneSearch._luceneDir, 
    analyzer, 
    IndexWriter.MaxFieldLength.UNLIMITED);    

var searchQuery = new TermQuery(new Term("ListID", listingDoc.Get("ListID"))); 

indexWriter.DeleteDocuments(searchQuery); 

其中listingDocDocument我試圖刪除該文件,如果它存在,然後再次將它添加到的類型索引,添加部分工作正常,但刪除部分不工作,即文件不存在時不刪除。因此,如果我搜索一個術語,它匹配它顯示多次...請指出我在這裏做錯了什麼

我使用ASP.Net MVC3和實體Framework4。每次記錄更新時,我都打算更新索引,但是它已被複制。當我搜索它,我得到的結果兩次或三次取決於我做更新的次數。

我試着用indexWriter.UpdateDocument(args);無濟於事......

+0

你提交你的修改和刷新IndexSearchers你刪除的文件後? –

+0

@JfBeaulac yup'indexWriter.Commit();' –

+0

UpdateDocument是否會導致相同的重複行爲,或者它只是沒有做任何事情? – itsadok

回答

3

調試時刪除它有時是有用的用相同的參數delete命令執行搜索,看看到底是怎麼回事遭到刪除。

如果你正在做一個deleteDocuments(query)你應該使用一個IndexSearcher這樣的:

IndexSearcher is = new IndexSearcher(indexWriter.GetReader()); 
TopDocs topDocs = is.Search(query, 100); 

,看看你在topDocs得到。我懷疑你會發現查詢不會返回任何結果。

+0

tnx你的時間,我會嘗試你的建議,並回到你的身邊...... –

+0

做到了!!!!!!!!你可以添加評論,你說'RSList' ID也應該索引... –

+0

和TNX的指導':)' –

0

您可以通過簡單地做到這一點:

Query query = queryParser.parse("My Query!"); 
    writer.deleteDocuments(query);