2012-03-16 46 views
0

我已經創建下列文件:Lucene.Net - 獲取不同類別

var document = new Document(); 
document.Add(new Field("category", "foo", Field.Store.YES, Field.Index.NOT_ANALYZED)); 
... 

我有屬於8個不同的類別大約10M的文件。我想通過執行搜索查詢來獲取所有不同的類別(獲取所有文檔並讀取值爲category的字段)。這是可行的嗎?

另一種方法是在索引重建時創建類別列表並將這些值寫入數據庫。

任何幫助將不勝感激!

回答

3

檢查出IndexReader.Terms()方法。

如果您爲某個字段賦予一個空Term,它將返回一個包含該字段所有條款的TermEnum。

TermEnum terms = indexReader.Terms(new Term("category")); 
// enumerate the terms 
+0

問題的是,它爲返回因爲索引中有條目,所以很多命中。比方說,我有150K「類別」中的400K條目。但是,我將返回400K條目。 – 2012-12-21 07:06:43

0

爲了延長BEAULAC的解決方案以供將來使用...

只得到唯一的結果集,你必須通過這樣的條款迭代:

while (null != terms.Term) { 
    If (term.Field.Equals("category")) { 
     // do something with this term 
    } 
    terms.Next(); 
} 
+1

好的補充,但實際上你應該在你的while條件中檢查字段名,或者當字段名不再是「category」時再打斷,因爲你會無緣無故地循環,枚舉已經被定位在字段上。 – 2012-12-21 16:15:28

+0

我得檢查一下,但據我測試,可能會發生這樣的情況:一個詞來自指定字段,另一個詞不是,最後一個詞又來了。因此,我實現了一個單獨的if。正如我所說,我必須檢查,因爲我不確定。 – 2012-12-27 10:14:42