2011-02-01 2 views
0

je peux obtenir docs par catégorie comme ceci: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()); 
       } 

Maintenant, je voudrais obtenir le TermFreqVector pour la documentation des visites. Je le fais habituellement comme ceci:

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

Cependant, je ne suis pas sûr de savoir comment faire dans mon scénario (à savoir que les obtenir pour les docs en hits). Les docs ont aussi un db pk.

Merci.

Christian

Répondre

0

Le premier paramètre à IndexReader.GetTermFreqVector ("c" dans votre exemple) est le numéro de document. hits.id(c) renverra l'ID du résultat cth. Alors vous feriez quelque chose comme:

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

(Comme une note de côté: la classe Hits est désapprouvée, vous voulez probablement utiliser quelque chose comme HitCollector ou une surcharge de recherche différent au lieu.)

+0

Merci. Je vais regarder ça. J'utilise Lucene .Net - prend probablement un certain temps jusqu'à ce que les hits soient dépréciés ... – cs0815

+0

@csetzkorn: C'est officiellement obsolète dans 2.9.3, ce qui est utilisé par lucene.net. Vous avez raison, il ne sera pas entièrement supprimé avant le 3.0. (C'est lent dans tous les cas, que ce soit officiellement ou non.) – Xodarap