2011-05-08 34 views
2

我正在使用Lucene 3.1來索引一些文檔。Lucene docFreq返回0

當我使用IndexSearcher.search()時,我成功取回查詢結果。

但是,當我使用IndexSearcher.doqFreq()時,我返回0作爲術語。誰能提供一些見解?

此外,爲什麼同時存在IndexSearcher.docFreq()和IndexReader.docFreq()?我曾經嘗試都,無一不給我0

這裏是我的代碼:

IndexReader indexReader = IndexReader.open(dir); 
    IndexSearcher searcher = new IndexSearcher(indexReader); 

    ... 

    String seachTermString = "foobar"; 
    String field = "body"; 
    Term term = new Term(field, searchTermString); 
    int numDocs = searcher.docFreq(term); 

,然後我得到numDocs = 0,即使當我使用IndexSearcher.search()使用相同的搜索詞字符串,我回來點擊。

回答

1

從您創建的Term中創建TermQuery,以使用search.docFreq(term)獲取文檔頻率。使用此TermQuery進行搜索並檢查它是否會產生任何結果。這應該。如果這個TermQuery沒有給出任何結果,那麼在問題的搜索步驟1中查詢創建中有什麼不妥之處。

1

嘗試將您的術語完全轉換爲小寫字母。

1

您是否在添加字段時啓用了Field.TermVector.YES選項?

Document doc = new Document(); 
doc.add(new Field("value", documentContents, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.YES)); 
1

使用TermEnum

Term term = new Term(field, searchTermString); 
TermEnum enum = indexReader.terms(term); 
int numDocs = enum.docFreq(); 

而且你不需要IndexSearcher