我想知道查询中的“前 10 个术语”(这只是一个日期范围查询)。我需要按日期划分的“总词频”......不是文档数,也不仅仅是整个索引中词频的计数。我已经研究了 Solr 术语组件和 Lucene 的 HighFreqTerms,但似乎都不支持我想要作为查询结果的操作。
我的索引非常简单......每个项目都进入“内容”字段,该字段也有一个“日期创建”字段(以支持查询)。对我可以使用的技术有什么想法吗?
我想知道查询中的“前 10 个术语”(这只是一个日期范围查询)。我需要按日期划分的“总词频”......不是文档数,也不仅仅是整个索引中词频的计数。我已经研究了 Solr 术语组件和 Lucene 的 HighFreqTerms,但似乎都不支持我想要作为查询结果的操作。
我的索引非常简单......每个项目都进入“内容”字段,该字段也有一个“日期创建”字段(以支持查询)。对我可以使用的技术有什么想法吗?
分面几乎提供了您正在寻找的内容,但会给出每个术语的文档频率,而不是总术语频率。将您的日期范围查询作为/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>
警告,这个请求可能很慢!
当您查询相关日期时,您可以遍历scoreDoc
返回的 s,并获取TermVector
内容字段的 s,例如:
Terms terms = myIndexReader.getTermVector(currentScoreDoc.doc, "content");
然后您可以遍历terms.iterator()
,并为每个术语创建一个计数集合(从TermsEnum.next()
orTermsEnum.term()
方法获取)