如何在不使用lucene中的术语的情况下获得n条记录?
例如,fieldname =“id”,我想获得id字段的前10条记录而没有任何术语。
我的代码是:
Dim qp As New QueryParser(Version.LUCENE_30,"id", analyzer)
Dim searcher = New IndexSearcher(directory, True)
Dim q As Query = New TermQuery(New Term("id"))
Dim hits As TopDocs = searcher.Search(q, 10)
不起作用。
当我将Dim q As Query = New TermQuery(New Term("id"))
更改为Dim q As Query = New TermQuery(New Term("id","10"))
时,它会有效,但我不想使用任何术语查询,我只想获取10个id字段的记录。
答案 0 :(得分:0)
根据您的需求,有一些可能性。
MatchAllDocsQuery
。TermRangeQuery
。如果传递给范围查询的bottom和top值都是null
,它将搜索具有该字段的任何(非null)值的所有文档,例如:new TermRangeQuery("id", null, null, true, true)
。如果您只想查看ID字段中的所有字词,则可以从TermEnum
获取IndexReader
,而不是搜索,例如:
TermEnum terms = reader.Terms(new Term("id"));
while(terms.next()) {
Term currentTerm = terms.term();
if (!(currentTerm.field().equals())) {
break;
}
String value = currentTerm.text();
//Whatever else you need to do with the value
}