作为 Lucene 查询的一部分,是否有可能从结果中排除具有少于 N 个术语或小于给定大小的文档?
完整的故事:我有一个包含许多文档的 Lucene 索引。有的很大,有的很小,可能只有几个字。我想进行一些测试,但仅限于大小合理的文档。如何过滤掉小文件?目前,我正在获取术语频率向量并删除少于 N 个术语的文档:
BooleanQuery q = some query...
TopDocs top = indexSearcher.search(q, size);
Collection<Integer> docNums = collectDocNums(top);
Iterator<Integer> it = docNums.iterator();
while (it.hasNext()) {
int candDocNum = it.next();
TermFreqVector tfv =
indexReader.getTermFreqVector(candDocNum, "field");
if (tfv.getTerms().length < N)
it.remove();
}
这可以通过过滤查询本身或以某种方式批处理它下面的循环来更有效地完成吗?