2011-02-01 7 views
0

私はこのようなカテゴリでドキュメントを取得することができます:今、私はヒットでドキュメントのためTermFreqVectorを取得したいと思いますTermFreqVector luceneの.NET

IndexSearcher searcher = new IndexSearcher(dir); 

       Term t = new Term("category", "Feline"); 
       Query query = new TermQuery(t); 
       Hits hits = searcher.Search(query); 

       for (int c = 0; c < hits.Length(); c++) 
       { 
        Document d = hits.Doc(c); 
        Console.WriteLine(c + " " + d.GetField("category").StringValue()); 
       } 

。私は通常、そうのようにこれを行うだろう:

for (int c = 0; c < searcher.MaxDoc(); c++) 
       { 
        TermFreqVector TermFreqVector = IndexReader.GetTermFreqVector(c, "content"); 

        String[] terms = TermFreqVector.GetTerms();//get the terms 
        int[] freqs = TermFreqVector.GetTermFrequencies();// 
       } 

しかし、私は私のシナリオでそれを行う方法がわからないです(つまりはただのヒットでドキュメントのためにそれらを得ます)。ドキュメントにはdb pkもあります。

ありがとうございました。

クリスチャン

答えて

0

(あなたの例では "C")IndexReader.GetTermFreqVectorへの最初のパラメータは、文書番号です。 hits.id(c)は、c番目の結果のIDを返します。

+0

感謝;:(。あなたはおそらく代わりにHitCollectorようなものか、別の検索オーバーロードを使用するヒットクラスは推奨されていません注意点として)

int Id = hits.id(c); TermFreqVector TermFreqVector = IndexReader.GetTermFreqVector(Id, "content"); // etc. 

:だからあなたのような何かをしたいです。私はこれを見ていきます。私はLucene .Netを使用しています。ヒット数が減少するまで、おそらく時間がかかります... – cs0815

+0

@csetzkorn:lucene.netが使用している2.9.3では公式に非推奨です。あなたはそれが3.0まで完全に削除されないということは間違いありません。 (正式にサポートされているかどうかにかかわらず、どんな場合でも遅いです。) – Xodarap