0

我想知道查询中的“前 10 个术语”(这只是一个日期范围查询)。我需要按日期划分的“总词频”......不是文档数,也不仅仅是整个索引中词频的计数。我已经研究了 Solr 术语组件和 Lucene 的 HighFreqTerms,但似乎都不支持我想要作为查询结果的操作。

我的索引非常简单......每个项目都进入“内容”字段,该字段也有一个“日期创建”字段(以支持查询)。对我可以使用的技术有什么想法吗?

4

2 回答 2

0

分面几乎提供了您正在寻找的内容,但会给出每个术语的文档频率,而不是总术语频率。将您的日期范围查询作为/select调用,然后添加参数: *rows=0因为您不想查看找到的文档,所以只计算 * facet=true * facet.field=<the field with the required terms> *facet.limit=10因为您想要前十个术语

在名为 的字段text上,部分响应如下所示:

<lst name="facet_counts">
  <lst name="facet_queries"/>
  <lst name="facet_fields">
    <lst name="text">
      <int name="from">3690</int>
      <int name="have">3595</int>
      <int name="it">3495</int>
      <int name="has">3450</int>
      <int name="one">3375</int>
      <int name="who">3221</int>
      <int name="he">3137</int>
      <int name="up">3125</int>
      <int name="all">3112</int>
      <int name="year">3089</int>
    </lst>
  </lst>
  <lst name="facet_dates"/>
  <lst name="facet_ranges"/>
</lst>

警告,这个请求可能很慢!

于 2013-10-10T02:22:01.923 回答
0

当您查询相关日期时,您可以遍历scoreDoc返回的 s,并获取TermVector内容字段的 s,例如:

Terms terms = myIndexReader.getTermVector(currentScoreDoc.doc, "content");

然后您可以遍历terms.iterator(),并为每个术语创建一个计数集合(从TermsEnum.next()orTermsEnum.term()方法获取)

于 2013-04-02T18:32:27.523 回答