2010-05-09 19 views
3

我想使用Lucene(實際上PyLucene!)來找出有多少文檔包含我的確切短語。我的代碼目前看起來像這樣...但它運行得很慢。有誰知道更快的方式來返回文檔計數?Lucene:返回文檔發生短語的最快方法?

phraseList = ["some phrase 1", "some phrase 2"] #etc, a list of phrases... 

countsearcher = IndexSearcher(SimpleFSDirectory(File(STORE_DIR)), True) 
analyzer = StandardAnalyzer(Version.LUCENE_CURRENT) 

for phrase in phraseList: 
    query = QueryParser(Version.LUCENE_CURRENT, "contents", analyzer).parse("\"" + phrase + "\"") 
    scoreDocs = countsearcher.search(query, 200).scoreDocs 
    print "count is: " + str(len(scoreDocs)) 

回答

6

通常,編寫自定義命中集電極是計數使用一個bitset如在Collector Javadoc中所示的點擊次數的最快方式。

其他方法是讓TopDocs指定一個結果的數量。

TopDocs topDocs = searcher.search(query, filter, 1); 

topDocs.totalHits會給你結果的總數。我不確定這是否與計算分數一樣快,這在上述方法中被跳過。

這些解決方案適用於Java。你必須在Python中檢查等效技術。