BTW, ponieważ znam cię osobiście powinien wskazywać dla innych już wiedziałem, że masz na myśli Lucene.net, a nie Lucene :) chociaż API będzie taki sam,
W wersjach wcześniejszych niż 2.9.x możesz zadzwonić pod numer IndexSearcher.Search(Query query, Filter filter)
, który powraca d a Hits
przedmiot, z których jedna Właściwości [metody, pod względem technicznym, ze względu na port Java] był Length()
To jest teraz oznaczone Zbędny, gdyż zostanie on usunięty w wersji 3.0, tylko wyniki wyszukiwania zwracają TopDocs
lub TopFieldDocs
obiektów.
Twoje alternatywy są
a) Wykorzystanie IndexServer.Search(Query query, int count)
który zwróci TopDocs
obiektu, więc TopDocs.TotalHits
pokaże wszystkich możliwych trafień ale kosztem faktycznie tworzenia <count>
wyniki
b) szybszy sposób jest aby zaimplementować własny obiekt Collector
(dziedziczy po Lucene.Net.Search.Collector
) i wywołać IndexSearcher.Search(Query query, Collector collector)
. Podczas każdego meczu metoda wyszukiwania wywoła na twoim kolektorze Collect(int docId)
, więc jeśli wewnętrznie będziesz śledzić, masz możliwość zebrania wszystkich wyników.
Należy zauważyć, że Lucene nie jest kompletnym środowiskiem zapytań o zestaw wyników i jest tak zaprojektowany, aby możliwie najszybciej przekazywać Ci najbardziej odpowiednie wyniki (programista). Każda metoda, która daje "całkowitą liczbę wyników" jest po prostu opakowaniem wyliczającym wszystkie dopasowania (jak w przypadku metody Collector).
Sztuką jest utrzymanie tego wyliczenia tak szybko, jak to możliwe. Najdroższą częścią jest deserializacja dokumentów z indeksu, wypełnianie każdego pola itp. Przynajmniej nowszym projektem API, wymagającym napisania własnego Collectora, zasada jest jasna, mówiąc deweloperowi, aby unikał deserializacji każdego wyniku z indeksu ponieważ tylko zgodne identyfikatory dokumentu i wynik są domyślnie dostarczane.
-1 za niekompletną odpowiedź (doceniam, że ktoś ci pomógł), ale gdzie jest "IndexServer"? – Dementic
@Dementic odwołanie do 'IndexServer' jest literówka, powinno to być' IndexSearcher' we wszystkich przypadkach. –