Por cierto, desde que te conozco personalmente debo señalar para otros, ya sabía que te referías a Lucene.net y no a Lucene :) aunque el API sería el mismo
En las versiones anteriores a la 2.9.x, puedes llamar al IndexSearcher.Search(Query query, Filter filter)
que devuelve d un Hits
objeto, una de las propiedades que [métodos, técnicamente, debido al puerto de Java] fue Length()
Este ahora está marcado obsoleto ya que se eliminará en 3,0, los únicos resultados de la búsqueda de retorno TopDocs
o TopFieldDocs
objetos.
Sus alternativas son
a) Uso IndexServer.Search(Query query, int count)
que devolverá un objeto TopDocs
, por lo TopDocs.TotalHits
le mostrará los accesos totales posibles, pero a costa de crear realmente <count>
resultados
b) Una forma más rápida es para implementar su propio objeto Collector
(herede de Lucene.Net.Search.Collector
) y llame al IndexSearcher.Search(Query query, Collector collector)
. El método de búsqueda llamará al Collect(int docId)
en su colector en cada coincidencia, de modo que si internamente realiza un seguimiento de eso, tiene una manera de obtener todos los resultados.
Cabe señalar que Lucene no es un entorno de consulta de conjunto de resultados total y está diseñado para transmitirle los resultados más relevantes (el desarrollador) lo más rápido posible. Cualquier método que proporcione un recuento de "resultados totales" es solo un conteo que enumera todas las coincidencias (como con el método del recopilador).
El truco es mantener esta enumeración lo más rápido posible. La parte más costosa es la deserialización de documentos del índice, rellenando cada campo, etc. Al menos con el nuevo diseño de API, que requiere que escriba su propio recopilador, el principio se aclara al decirle al desarrollador que evite deserializar cada resultado del índice. ya que solo se asignan Id. de documentos coincidentes y una puntuación de forma predeterminada.
-1 por respuesta incompleta (realmente aprecio que ayudes a alguien), pero ¿dónde está el 'IndexServer'? – Dementic
@Dementic la referencia 'IndexServer' es un error tipográfico, debería ser' IndexSearcher' en todos los casos. –