2012-03-16 29 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