Lucene.Net - 获取不同类别
我已经创建下列文件:Lucene.Net - 获取不同类别
var document = new Document();
document.Add(new Field("category", "foo", Field.Store.YES, Field.Index.NOT_ANALYZED));
...
我有属于8个不同的类别大约10M的文件。我想通过执行搜索查询来获取所有不同的类别(获取所有文档并读取值为category
的字段)。这是可行的吗?
另一种方法是在索引重建时创建类别列表并将这些值写入数据库。
任何帮助将不胜感激!
检查出IndexReader.Terms()方法。
如果您为某个字段赋予一个空Term,它将返回一个包含该字段所有条款的TermEnum。
TermEnum terms = indexReader.Terms(new Term("category"));
// enumerate the terms
为了延长BEAULAC的解决方案以供将来使用...
只得到唯一的结果集,你必须通过这样的条款迭代:
while (null != terms.Term) {
If (term.Field.Equals("category")) {
// do something with this term
}
terms.Next();
}
好的补充,但实际上你应该在你的while条件中检查字段名,或者当字段名不再是“category”时再打断,因为你会无缘无故地循环,枚举已经被定位在字段上。 – 2012-12-21 16:15:28
我得检查一下,但据我测试,可能会发生这样的情况:一个词来自指定字段,另一个词不是,最后一个词又来了。因此,我实现了一个单独的if。正如我所说,我必须检查,因为我不确定。 – 2012-12-27 10:14:42
问题的是,它为返回因为索引中有条目,所以很多命中。比方说,我有150K“类别”中的400K条目。但是,我将返回400K条目。 – 2012-12-21 07:06:43