BTW, da quando ti conosco personalmente Tengo a precisare per gli altri sapevo già che ti riferivi a Lucene.net e non a Lucene :) anche se l'API sarebbe la stessa
Nelle versioni precedenti a 2.9.x puoi chiamare IndexSearcher.Search(Query query, Filter filter)
che restituisce d un Hits
oggetto, di cui una proprietà [metodi, tecnicamente, dovuto alla porta Java] era Length()
Questa è contrassegnato Obsoleto quanto verrà rimossa a 3.0, i soli risultati di ricerca ritorno TopDocs
o TopFieldDocs
oggetti.
Le alternative sono
a) Utilizzare IndexServer.Search(Query query, int count)
che restituirà un oggetto TopDocs
, così TopDocs.TotalHits
vi mostrerà il totale colpi possibili, ma a scapito di realtà la creazione <count>
risultati
b) Un modo più veloce è per implementare il proprio oggetto Collector
(ereditato da Lucene.Net.Search.Collector
) e chiamare IndexSearcher.Search(Query query, Collector collector)
. Il metodo di ricerca chiamerà il numero Collect(int docId)
sul tuo raccoglitore ad ogni incontro, quindi se internamente tieni traccia di ciò hai un modo per ottenere tutti i risultati.
Si noti che Lucene non è un ambiente di query con set di risultati totali ed è progettato per trasmettere i risultati più pertinenti all'utente (lo sviluppatore) il più rapidamente possibile. Qualsiasi metodo che fornisce un conteggio "risultati totali" è solo un wrapper che enumera su tutte le corrispondenze (come con il metodo Collector).
Il trucco è mantenere questa enumerazione il più velocemente possibile. La parte più costosa è la deserializzazione di Documenti dall'indice, la compilazione di ogni campo ecc. Almeno con la nuova progettazione dell'API, che richiede di scrivere il proprio Collector, il principio è chiarito dicendo allo sviluppatore di evitare di deserializzare ogni risultato dall'indice poiché sono forniti solo ID documento e punteggio corrispondenti.
fonte
2010-04-06 23:42:37
-1 per risposta incompleta (apprezzo il tuo aiuto a qualcuno), ma dov'è il 'IndexServer'? – Dementic
@Dementic il riferimento 'IndexServer' è un refuso, dovrebbe essere' IndexSearcher' in tutti i casi. –