0

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"))と動作しますが、用語クエリを使用したくありません。id フィールドの 10 レコードを取得したいだけです。

4

1 に答える 1

0

探しているものに応じて、いくつかの可能性があります。

  • インデックスから 10 個のドキュメントを取得するだけの場合は、MatchAllDocsQuery.
  • field = "id" の値を持つドキュメントのみを取得する場合は、無制限の を使用できますTermRangeQuery。範囲クエリに渡された下位値と上位値の両方がある場合、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
    }
    
于 2013-11-13T17:50:13.027 に答える