获得n条记录而不使用术语......? (Lucene的)

时间:2013-11-13 15:09:18

标签: lucene

如何在不使用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字段的记录。

1 个答案:

答案 0 :(得分:0)

根据您的需求,有一些可能性。

  • 如果您只想从索引中获取10个文档,请使用MatchAllDocsQuery
  • 如果您只想获取具有field =“id”值的文档,则可以使用开放式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
    }