2012-10-17 31 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