2011-01-06 8 views
3

JavaのLuceneでドキュメントごとのヒット数を取得するにはどうしたらいいですか? 。我々はluceneのドキュメント(doc)のヒット数を取得する

設定した場合:私は、TFVがnull :( が、そこから各ドキュメントにヒットを取得する方法についていくつかのいずれかの直接

編集することができようになっている

 
    IndexReader reader; 
    reader = IndexReader.open(FSDirectory.open(new File(index)), true); 
    Searcher searcher = new IndexSearcher(reader); 
    String feild = "contents" 
    QueryParser parser = new QueryParser(Version.LUCENE_CURRENT, field,analyzer); 
    Query query = parser.parse("test"); 
    TopScoreDocCollector collector = TopScoreDocCollector.create(
        5 * hitsPerPage, false); 
    searcher.search(query, collector); 
    ScoreDoc[] hits = collector.topDocs().scoreDocs; 
    Searcher searcher = new IndexSearcher(reader); 
    int numTotalHits = collector.getTotalHits(); 
    System.out.println(numTotalHits + " total matching documents");

for (int i = start; i < end; i++) { int id = hits[i].doc; TermFreqVector[] Tfv = reader.getTermFreqVectors(id);

を持っていますあなたは索引付け中にTermVector.YESを使用できます。 ありがとう、 Sharma

答えて

0

Similarityの実装を書くことができます。指定された文書に用語が与えられた回数を与える頻度を指定します。その答えは、あなたが長期FREQベクトルを使用することができ、言うように

+0

私に例を教えてもらえますか? – remo

+0

ちょうど類似性クラスを拡張します。周波数を格納するtf(float frequency)メソッドを実装する。インデックスサーチャーhttp://lucene.apache.org/java/3_0_3/api/all/org/apache/lucene/search/Searcher.html#setSimilarity%28org.apache.lucene.searchに類似性を付けることを忘れないでください。類似性%29 – jarekrozanski

0

これはGet search word Hits (number of occurences) per document in Lucene

の複製です。 jarekrozanskiの答えはより速いですが、あなたは嫌いかもしれないカスタム類似クラスを作る必要があります。

+0

このリンクは、luceneの3.0リリースでは存在しないfeildのterm freq vectorを使用するよう提案しています。私たちはdocNumberが必要ですが、読者のObjectから取得できます。あなたは私に文書番号が何であるか教えてもらえますか? – remo

+0

@sharma: "docNumber"はdocの単なるIDです。つまり、 'reader.doc()'と 'searcher.doc()'は同じことをします。したがって、あなたのコードを使って、doc idは 'hits [i] .doc'として見つけられます。 – Xodarap

+0

@ Xodarap:IndexReaderオブジェクトを使用してTermFreqVectorを取得すると、何らかの理由でnullが返されます。 3.0リリースでは、IndexReader以外のTermFreqVectorを取得するためのオブジェクトはありますか? – remo

関連する問題