Instrucciones Lucene
Descripción general
Si bien Lucene ofrece la posibilidad de crear sus propias consultas a través de su API, también proporciona un lenguaje de consulta enriquecido a través del Analizador de consultas, un analizador léxico que interpreta una cadena en una consulta de Lucene utilizando JavaCC.
Generalmente, la sintaxis del analizador de consultas puede cambiar entre versiones. Esta página describe la sintaxis de la versión actual. Si utiliza una versión diferente de Lucene, consulte la copia de docs/queryparsersyntax.html que se distribuyó con la versión que utiliza.
Antes de optar por utilizar el analizador de consultas proporcionado, tenga en cuenta lo siguiente:
- Si genera una cadena de consulta programáticamente y luego la analiza con el analizador de consultas, debería considerar seriamente crear sus consultas directamente con la API de consultas. En otras palabras, el analizador de consultas está diseñado para texto introducido por personas, no para texto generado por programas.
- Es mejor añadir los campos sin tokenizar directamente a las consultas, en lugar de hacerlo mediante el analizador de consultas. Si la aplicación genera los valores de un campo programáticamente, también deberían generarse las cláusulas de consulta para dicho campo. Un analizador, utilizado por el analizador de consultas, está diseñado para convertir el texto introducido por el usuario en términos. Los valores generados por el programa, como fechas, palabras clave, etc., deben generarse por el programa de forma consistente.
- En un formulario de consulta, los campos de texto general deben usar el analizador de consultas. Todos los demás, como rangos de fechas, palabras clave, etc., se añaden mejor directamente a través de la API de consultas. Un campo con un conjunto limitado de valores, que se puede especificar mediante un menú desplegable, no debe añadirse a una cadena de consulta que se analiza posteriormente, sino como una cláusula TermQuery.
Términos
Una consulta se divide en términos y operadores. Hay dos tipos de términos: términos individuales y frases.
Un término único es una sola palabra como "prueba" o "hola".
Una frase es un grupo de palabras rodeadas de comillas dobles como "hola muñequita".
Se pueden combinar varios términos con operadores booleanos para formar una consulta más compleja (ver a continuación).
Nota: El analizador utilizado para crear el índice se utilizará con los términos y frases de la cadena de consulta. Por lo tanto, es importante elegir un analizador que no interfiera con los términos utilizados en la cadena de consulta.
Campos
Lucene admite datos con campos. Al realizar una búsqueda, puede especificar un campo o usar el campo predeterminado. Los nombres de los campos y el campo predeterminado dependen de la implementación.
Puede buscar en cualquier campo escribiendo el nombre del campo seguido de dos puntos ":" y luego el término que está buscando.
Por ejemplo, supongamos que un índice de Lucene contiene dos campos: título y texto, siendo texto el campo predeterminado. Si desea encontrar el documento titulado "El camino correcto", que contiene el texto "No sigas por aquí", puede introducir:
Título: "El camino correcto" Y texto: ir
o
Título: "El camino correcto" Y ve
Dado que el texto es el campo predeterminado, el indicador de campo no es obligatorio.
Nota: El campo sólo es válido para el término que precede directamente, por lo que la consulta
Título: El camino correcto
Solo encontrará "El" en el campo de título. Encontrará "Derecho" y "Camino" en el campo predeterminado (en este caso, el campo de texto).
Modificadores de términos
Lucene admite la modificación de términos de consulta para proporcionar una amplia gama de opciones de búsqueda.
Búsquedas con comodines
Lucene admite búsquedas con comodines de uno o varios caracteres dentro de términos individuales (no dentro de consultas de frase).
Para realizar una búsqueda de comodín de un solo carácter utilice el símbolo "?".
Para realizar una búsqueda de comodines de varios caracteres utilice el símbolo "*".
La búsqueda con comodín de un solo carácter busca términos que coincidan con el carácter reemplazado. Por ejemplo, para buscar "texto" o "prueba", puede usar la siguiente búsqueda:
te?t
Las búsquedas con comodines de varios caracteres buscan cero o más caracteres. Por ejemplo, para buscar "prueba", "pruebas" o "probador", puede usar la siguiente búsqueda:
prueba*
También puedes utilizar búsquedas con comodines en medio de un término.
texto
Nota: No puede utilizar el símbolo * o ? como primer carácter de una búsqueda.
Búsquedas de expresiones regulares
Lucene admite búsquedas con expresiones regulares que coincidan con un patrón entre barras diagonales "/". La sintaxis puede cambiar entre versiones, pero la sintaxis actual compatible está documentada en la RegExpclase. Por ejemplo, para encontrar documentos que contengan "moat" o "boat":
/[mb]avena/
Búsquedas difusas
Lucene admite búsquedas difusas basadas en la distancia Damerau-Levenshtein. Para realizar una búsqueda difusa, utilice el símbolo "~" al final de un término. Por ejemplo, para buscar un término con una ortografía similar a "roam", utilice la búsqueda difusa:
vagar~
Esta búsqueda encontrará términos como espuma y vagabundea.
Un parámetro adicional (opcional) puede especificar el número máximo de ediciones permitidas. El valor está entre 0 y 2. Por ejemplo:
vagar~1
El valor predeterminado que se utiliza si no se proporciona el parámetro es 2 distancias de edición.
Anteriormente, se permitía un valor de punto flotante. Esta sintaxis se considera obsoleta y se eliminará en Lucene 5.0.
Búsquedas de proximidad
Lucene permite encontrar palabras dentro de una distancia específica. Para realizar una búsqueda de proximidad, utilice el símbolo "~" al final de una frase. Por ejemplo, para buscar "apache" y "yakarta" con una diferencia de 10 palabras en un documento, utilice la siguiente búsqueda:
"Apache de Yakarta" ~10
Búsquedas de rango
Las consultas de rango permiten encontrar coincidencias en documentos cuyos valores de campo se encuentran entre los límites inferior y superior especificados por la consulta. Pueden incluir o excluir los límites superior e inferior. La ordenación se realiza lexicográficamente.
fecha_mod:[20020101 a 20030101]
Esto encontrará documentos cuyos campos mod_date tengan valores entre 20020101 y 20030101, ambos inclusive. Tenga en cuenta que las consultas de rango no están reservadas para campos de fecha. También puede usar consultas de rango con campos que no sean de fecha:
Título:{Aida a Carmen}
Esto encontrará todos los documentos cuyos títulos estén entre Aida y Carmen, pero sin incluir a Aida y Carmen.
Las consultas de rango inclusivo se indican entre corchetes. Las consultas de rango exclusivo se indican entre llaves.
Impulsar un término
Lucene proporciona el nivel de relevancia de los documentos coincidentes según los términos encontrados. Para aumentar la relevancia de un término, utilice el símbolo "^" con un factor de aumento (un número) al final del término que busca. Cuanto mayor sea el factor de aumento, más relevante será el término.
La optimización te permite controlar la relevancia de un documento al optimizar su término. Por ejemplo, si buscas...
Apache de Yakarta
Si desea que el término "Yakarta" sea más relevante, auméntelo usando el símbolo ^ junto con el factor de refuerzo junto al término. Escriba:
Yakarta^4 Apache
Esto hará que los documentos con el término yakarta parezcan más relevantes. También puedes mejorar los términos de frase, como en el ejemplo:
"Apache de Yakarta"^4 "Apache Lucene"
De forma predeterminada, el factor de refuerzo es 1. Aunque el factor de refuerzo debe ser positivo, puede ser menor que 1 (por ejemplo, 0,2).
Operadores booleanos
Los operadores booleanos permiten combinar términos mediante operadores lógicos. Lucene admite AND, "+", OR, NOT y "-" como operadores booleanos (Nota: Los operadores booleanos deben estar en mayúsculas).
O
El operador OR es el operador de conjunción predeterminado. Esto significa que si no hay un operador booleano entre dos términos, se utiliza el operador OR. El operador OR vincula dos términos y encuentra un documento coincidente si alguno de ellos existe en un documento. Esto equivale a una unión mediante conjuntos. Se puede usar el símbolo || en lugar de la palabra OR.
Para buscar documentos que contengan "jakarta apache" o simplemente "jakarta", utilice la consulta:
"Apache de Yakarta" Yakarta
o
"Apache de Yakarta" O Yakarta
Y
El operador AND busca documentos donde ambos términos aparecen en cualquier parte del texto de un mismo documento. Esto equivale a una intersección mediante conjuntos. Se puede usar el símbolo && en lugar de la palabra AND.
Para buscar documentos que contengan "jakarta apache" y "Apache Lucene", utilice la consulta:
"Apache de Yakarta" y "Apache Lucene"
+
El operador "+" u obligatorio requiere que el término después del símbolo "+" exista en algún lugar del campo de un solo documento.
Para buscar documentos que deben contener "jakarta" y pueden contener "lucene", utilice la consulta:
+yakarta lucene
NO
El operador NOT excluye los documentos que contienen el término después de NOT. Esto equivale a una diferencia usando conjuntos. Se puede usar el símbolo ! en lugar de la palabra NOT.
Para buscar documentos que contengan "jakarta apache" pero no "Apache Lucene", utilice la consulta:
"Apache de Yakarta" NO "Apache Lucene"
Nota: El operador NOT no puede usarse con un solo término. Por ejemplo, la siguiente búsqueda no arrojará resultados:
NO "apache de Yakarta"
-
El operador "-" o prohibir excluye los documentos que contienen el término después del símbolo "-".
Para buscar documentos que contengan "jakarta apache" pero no "Apache Lucene", utilice la consulta:
"Apache de Yakarta" - "Apache Lucene"
Agrupamiento
Lucene permite el uso de paréntesis para agrupar cláusulas y formar subconsultas. Esto puede ser muy útil si desea controlar la lógica booleana de una consulta.
Para buscar "yakarta" o "apache" y "sitio web", utilice la consulta:
(Yakarta O Apache) Y sitio web
Esto elimina cualquier confusión y garantiza que el sitio web debe existir y que puede existir el término jakarta o apache.
Agrupación de campos
Lucene admite el uso de paréntesis para agrupar varias cláusulas en un solo campo.
Para buscar un título que contenga tanto la palabra "return" como la frase "pink panther", utilice la consulta:
título:(+return +"pantera rosa")
Cómo escapar de caracteres especiales
Lucene admite el escape de caracteres especiales que forman parte de la sintaxis de la consulta. Los caracteres especiales de la lista actual son
+ - && || ! ( ) { } [ ] ^ " ~ * ? : \ /
Para escapar estos caracteres, utilice el símbolo \ antes del carácter. Por ejemplo, para buscar (1+1):2, utilice la consulta:
\(1\+1\)\:2