我想知道查询中的“前10个术语”(这只是一个日期范围查询)。我需要按日期“总学期频率”... 不一份文件,不只是整个索引中的学期频率计数。我查看了Solr TermsComponent和Lucene的HighFreqTerms,但似乎都不支持我想要的查询结果。
我的索引很简单......每个项目都进入'content'字段,该字段也有'dateCreated'字段(以支持查询)。对我可以使用的技术的任何想法?
答案 0 :(得分:0)
当您查询相关日期时,您可以遍历已返回的scoreDoc
和内容字段的get TermVector
,如:
Terms terms = myIndexReader.getTermVector(currentScoreDoc.doc, "content");
然后您可以遍历terms.iterator()
,并为每个字词创建一系列计数(从TermsEnum.next()
或TermsEnum.term()
方法获取)
答案 1 :(得分:0)
Faceting几乎提供了您正在寻找的内容,但会为每个字词提供文档频率,而不是总字词频率。将您的日期范围查询作为/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>
警告,此请求可能很慢!