2016-08-27 2 views
2

In einem Basiscode zum Erstellen von Index- und Suchabfragen möchte ich TFIDFsimilarity zum Rangieren von abgerufenen Dokumenten verwenden. Aber ich bekomme einen Fehler "Kann den Typ TFIDFSimilarity nicht instanziieren". Mein Code ist unten angegeben:So ordnen Sie Dokumente mithilfe von tfidf similairty in lucene

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(); 
    } 
} 

Antwort

1

TFIDFSimilarity ist eine abstrakte Klasse. Sie können es nicht instanziieren.

ClassicSimilarity ist eine Implementierung davon (Angenommen, Sie verwenden 5.4 oder später, sonst DefaultSimilarity). Benutze das stattdessen.

+0

Danke. Ja, ich verwende 6.1.0 und verwende bereits ClassicSimilarity. –

Verwandte Themen