2012-10-17 30 views
0

我使用Lucene實現了分面搜索。我有一個文件索引和一個分類索引。然後,我收集各個分類標準的方面。獲取一個類別的文檔數

我的問題是:我怎樣才能在分類的特定類別索引的文檔的數量?

我覺得我的問題很簡單,但我無法找到Lucene的API,也沒有在谷歌搜索中的任何方法。我只發現如何使用IndexReader類的numDocs()方法獲得整個索引中的文檔數。

回答

1

如果您有每個類別一個長期的指數,或許你可以使用像TermEnum.docFreq()?您可以從IndexReader.terms(Term)獲得TermEnum對象。

+0

不,它是類別和文檔之間的關係1 - n。我有n個文件在特定類別下索引,而不是條款。 – synack

+1

@ Kits89您可以爲每個類別組成一個術語,以便在類別和組成術語之間有一個1-1映射。按照術語,我指的是Lucene的術語,沿着「新術語」(「類別」,「商業/投資/基金/對衝基金」)。你的文件有一個類別欄位,對嗎?如果你有Lucene沒有分析它的索引字段,那應該照顧索引部分。然後,您可以在搜索部分創建我剛剛提到的Term對象,並使用此Term對象調用前面提到的方法。 –

+0

現在我明白你的意思了。事實上,我會像你說的那樣用「類別」字段爲文檔編制索引。我會盡力去做你說的,謝謝。 – synack

0

我真的不知道有足夠的瞭解你的索引結構建議你正確的查詢,但如果你執行一個查詢搜索您的類別中的所有文檔,然後返回結果集的一般有一個計數查詢的總點擊數。

舉例來說,如果你使用的查詢任一:

search(Query query, int n) 
search(Query query, Filter filter, int n) 

然後你會得到一個TopDocs對象返回,從中可以得到的命中總數從回:TopDocs.totalHits

+0

分類法具有[ODP(http://www.dmoz.org)的目錄結構。這些文檔是分類在ODP中的網頁,我使用ODP的目錄結構中的路徑爲它們編制索引。 我認爲搜索類別中的所有文檔可能是一個解決方案,但是,我該怎麼做呢?在你的答案,我不明白爲什麼'如果你輸入一個查詢,就得到了一組文件,在該類別中totalHits'將返回的文檔數量中的類... – synack

+0

,然後totalHits將是數你尋找。諸如'directory:arts/television *'之類的前綴查詢可能會幫助您查找,或者您可能會使用短語查詢,或者您可以查找與+運算符結合使用的單個路徑組件,這可能會更有意義,除非那會導致碰撞。取決於數據的表示(即使用的分析儀等)。 – femtoRgon