2013-02-19 11 views
6

Sto lavorando a lucene e sono stato smembrato su questo problema con l'oggetto Hits. Ho un utilizzo di Lucene.Net.Search ma per qualche ragione il VS12 Express non riesce a trovare l'oggetto Hits così non riesce a compilare quanto segue.Hits Object Deprecated in Lucene.Net 3.03, come posso sostituirlo?

Il compilatore si lamenta su questa linea

Hits hits = searcher.Search(booleanQuery, hits_limit); 

con il seguente messaggio di errore

di errore 1 Il tipo o dello spazio dei nomi il nome 'Hits' non è stato trovato (sei tu manca una direttiva con o un riferimento all'assemblaggio?)

Non capisco, secondo l'alchino delle esercitazioni online di cui hai bisogno è Lucnen.Ne t.Search

Qualsiasi Consigli

// validation 
if (subqueries.Count == 0) return new List<MATS_Doc>(); 
// set up lucene searcher 
Searcher searcher = new IndexSearcher(_directory, false); 
var hits_limit = 1000; 
var analyzer = new StandardAnalyzer(Version.LUCENE_30); 
BooleanQuery booleanQuery = new BooleanQuery(); 
foreach (Query fieldQuery in subqueries) 
{ 
    booleanQuery.Add(fieldQuery, Occur.SHOULD); 
} 
//var parser = new QueryParser(Version.LUCENE_30, searchField, analyzer); 
//var query = _parseQuery(searchQuery, parser); 
Hits hits = searcher.Search(booleanQuery, hits_limit); 
IEnumerable<MATS_Doc> results = _mapLuceneSearchResultsToDataList(hits, searcher); 
analyzer.Close(); 
searcher.Dispose(); 
return results; 

risposta

15

Io uso Lucene.net 3.0.3, e search() restituisce un TopDocs oggetto, che contiene alcune proprietà e una serie di elementi ScoreDoc. Ecco un esempio:

Lucene.Net.Search.TopDocs results = searcher.Search(booleanQuery, null, hits_limit); 


foreach(ScoreDoc scoreDoc in results.ScoreDocs){ 
    // retrieve the document from the 'ScoreDoc' object 
    Lucene.Net.Documents.Document doc = searcher.Doc(scoreDoc.Doc); 
    string myFieldValue = doc.get("myField"); 
} 
+0

Grazie! c'è comunque la possibilità di riportare tutto il documento in un colpo invece che campo per campo? – TheCodeNovice

+0

la riga ** Lucene.Net.Documents.Document doc = searcher.Doc (scoreDoc.Doc); ** recupera l'intero documento. Quindi puoi accedere ai suoi campi proprio come ho fatto nel mio esempio, o iterare attraverso di loro usando qualcosa come ** foreach (Lucene.Net.Documents.Field f in doc.GetFields()) {Console.WriteLine ("field =" + f.Name + ", value =" + f.StringValue)} ** – mbarthelemy

+0

perfetto! grazie ancora – TheCodeNovice

Problemi correlati