Lucene 获取n条记录而不使用术语。。。?(卢塞恩)

Lucene 获取n条记录而不使用术语。。。?(卢塞恩),lucene,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")) Di

如何在不使用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 Term Query(New Term(“id”))
更改为
Dim q As Query=New Term Query(New Term(“id”,“10”))
时,它就可以工作了,但我不想使用任何术语查询,我只想获得id字段的10条记录。

有一些可能性,这取决于您正在寻找的内容

  • 如果您只想从索引中获取10个文档,请使用
  • 如果只希望获取具有field=“id”值的文档,则可以使用开放式。如果传递给范围查询的底部和顶部值均为
    null
    ,则它将搜索该字段具有任何(非null)值的所有文档,例如:
    newtermrangequery(“id”,null,null,true,true)
  • 如果您只想查看id字段中的所有术语,您可以从
    IndexReader
    中获取
    TermEnum
    ,而不是搜索,类似于:

    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
    }