He hecho algunos experimentos, y parece que la forma más sencilla de lograr esto es crear un QueryParser
y llame SetAllowLeadingWildcard(true)
y la búsqueda de field:*
así:
var qp = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, field, analyzer);
qp.SetAllowLeadingWildcard(true);
var query = qp.Parse("*"));
(Nota Estoy fijando el valor por defecto campo de QueryParser
a field
en su constructor, de ahí la búsqueda de solo "*"
en).
no puedo dar fe de la efectividad de este método es sobre otros métodos, pero al ser el método más simple que puedo encontrar, yo esperaría que sea al menos tan eficiente como field:[* TO *]
, y evita tener que hacer cosas hacker como field:[0* TO z*]
, que puede no tener en cuenta todos los valores posibles, como los valores que comienzan con caracteres no alfanuméricos.
Esto debería funcionar. Sería un poco más complejo en caso de que el campo tenga valores que comiencen con números o letras mayúsculas. Debería ser fácil de hacer con una consulta OR. –
¡Buen punto! Pero si comienza con un capital, un rango que comience con un * debería atraparlo porque el javadoc de TermRangeQuery establece que usa String.compareTo para determinar si una cadena es parte del rango. –
Esto se ve bien. No estoy seguro de atrapar registros comenzando con números, pero este es un buen comienzo. ¡Gracias! –