【问题标题】:Get number of documents of a category获取某个类别的文档数
【发布时间】:2012-10-17 15:57:55
【问题描述】:

我使用 Lucene 实现了分面搜索。我有一个文档索引和一个分类索引。然后我为给定的分类级别收集方面。

我的问题是:我如何才能获得在给定分类法类别中索引的文档数量?

我认为我的问题很简单,但我在 Lucene 的 API 中找不到任何方法,也无法在 Google 中搜索。我只发现了如何使用IndexReader类的numDocs()方法获取整个索引中的文档数。

【问题讨论】:

    标签: java lucene faceted-search


    【解决方案1】:

    如果索引中的每个类别都有一个术语,也许可以使用TermEnum.docFreq() 之类的术语?您可以从IndexReader.terms(Term) 获取 TermEnum 对象。

    【讨论】:

    • 不,它是类别和文档之间的关系 1 - n。我在给定类别下索引了 n 个文档,而不是术语。
    • @Kits89 您可以为您拥有的每个类别组成一个术语,以便类别和您组成的术语之间存在 1-1 映射。至于术语,我指的是 Lucene 的术语,沿线new Term("category", "Business/Investing/Funds/Hedge_Funds")。您的文档有一个类别字段,对吗?如果您让 Lucene 索引该字段而不对其进行分析,则应该注意索引部分。然后就可以在搜索部分,创建我刚才提到的Term对象,并用这个Term对象调用我前面提到的方法。
    • 现在我明白你的意思了。事实上,我像你说的那样用Category 字段索引文档。我会尽力按你说的做,谢谢。
    【解决方案2】:

    我不太了解您的索引结构,无法为您建议正确的查询,但如果您执行查询以搜索您类别中的所有文档,那么返回的结果集通常会有一个计数查询的总命中数。

    例如,如果您使用以下任一方式进行查询:

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

    然后你会得到一个TopDocs对象返回,从中你可以得到返回的总命中数:TopDocs.totalHits

    【讨论】:

    • 分类具有ODP 目录结构。这些文档是归类在 ODP 中的网页,我使用 ODP 目录结构中的路径对它们进行索引。我认为搜索该类别中的所有文档可能是一个解决方案,但是,我该怎么做呢?在您的回答中,我不明白为什么 totalHits 会返回该类别中的文档数量...
    • 如果您输入的查询准确地获取了该类别中的文档集,那么 totalHits 将是您要查找的数字。诸如“directory:arts/television*”之类的前缀查询可能会为您提供所需的内容,或者您​​可以使用短语查询,或者您可以查找与 + 运算符组合的单个路径组件,这可能更有意义,除非这会导致碰撞。在某种程度上取决于数据的表示(即使用的分析器等)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 2022-10-07
    • 2020-10-22
    • 1970-01-01
    相关资源
    最近更新 更多