2016-08-27 11 views
2

インデックスと検索クエリを作成するための基本的なコードでは、TFIDFsimilarityを使用して取得したドキュメントのランク付けを行います。しかし、 "TFIDFSimilarity型をインスタンス化できません"というエラーが表示されます。私のコードは以下の通りです:luceneでtfidf similairtyを使用してドキュメントをランク付けする方法

public class TFIDF_T { 

private static Document createDocument(String id, String tb) { 
    Document doc = new Document(); 
    doc.add(new Field("id", id, TextField.TYPE_STORED)); 
    doc.add(new Field("tb", tb, TextField.TYPE_STORED)); 
    return doc; 
} 

private static void search(IndexSearcher searcher, String queryString, Analyzer analyzer) throws IOException, ParseException { 
    QueryParser parser = new QueryParser("tb", analyzer); 
    Query query = parser.parse(queryString); 
    ScoreDoc[] hits = searcher.search(query, 20).scoreDocs; 
    int hitCount = hits.length; 
    for (int i = 0; i < hitCount; i++) { 
     Document doc = searcher.doc(hits[i].doc); 
     System.out.println(doc.get("id")); 
    } 
} 

public static void run(String path) throws IOException, ParseException { 
    int ctr = 0; 
    Analyzer analyzer = new StandardAnalyzer(); 
    RAMDirectory directory = new RAMDirectory(); 
    IndexWriterConfig config = new IndexWriterConfig(analyzer); 
    IndexWriter iwriter = new IndexWriter(directory, config); 
     String id = "101"; 
     String tb = "How to rank documents using tfidfsimilairty"; 
     iwriter.addDocument(createDocument(id, tb)); 
    } 
    iwriter.close(); 
    DirectoryReader ireader = DirectoryReader.open(directory); 
    IndexSearcher isearcher = new IndexSearcher(ireader); 
    isearcher.setSimilarity(new **TFIDFSimilarity**()); 
    String tb1 = "How to rank documents using tfidfsimilairty"; 
    search(isearcher, tb1, analyzer); 
    } 
    ireader.close(); 
    directory.close(); 
    } 
} 

答えて

1

TFIDFSimilarityは抽象クラスです。インスタンス化することはできません。

ClassicSimilarityは、その実装です(5.4以降を使用している場合は、DefaultSimilarity)。その代わりに使用してください。

+0

ありがとうございました。はい、私は6.1.0を使用しており、すでにClassicSimilarityを使用しています。 –

関連する問題