Story Transcript
Sintaxis del Analizador de consultas Lucene
Índice: Visión general..................................................................... 2 Términos............................................................................. 2 Campos............................................................................... 2 Modificadores de texto...................................................... 3 Búsquedas comodín............................................... 3 Búsquedas difusas.................................................. 4 Búsquedas de proximidad..................................... 4 Búsquedas de rango............................................... 4 Impulso de un término.......................................... 4 Operadores booleanos....................................................... 5 OR........................................................................... 5 AND......................................................................... 5 +............................................................................... 5 NOT......................................................................... 6 -................................................................................ 6 Agrupamiento.................................................................... 6 Agrupamiento de campos................................................. 6 Caracteres especiales de escape....................................... 6
1
Visión general Aunque Lucene proporciona la posibilidad de crear sus propias consultas a través de su API, también proporciona un rico lenguaje de consulta a través del Analizador de consultas. Esta página proporciona la sintaxis del Analizador de consultas Lucene, un analizador sintáctico que interpreta una secuencia en una consulta Lucene mediante JavaCC. Antes de optar por usar el Analizador de consultas que se proporciona, tenga en cuenta lo siguiente: 1. Si está generando una secuencia de consultas mediante un programa y, después, se analiza con el analizador de consultas, entonces debería considerar seriamente crear sus consultas directamente con la consulta API. En otras palabras, el analizador de consultas se ha diseñado para texto introducido por humanos, no para texto generado por programas. 2. Los campos sin lexemas se añaden mejor a las consultas y no a través del analizador de consultas. Si los valores de un campo se generan mediante programas a través de la aplicación, entonces también debería pasar lo mismo con las cláusulas de consulta de este campo. Un analizador, que es lo que utiliza el analizador de consultas, se diseña para convertir en términos un texto introducido por humanos. Los valores generados por programas, como fechas, palabras clave, etc., deben generarse constantemente mediante programas. 3. En un formulario de consulta, los campos que representan texto general deben usar el analizador de consultas. El resto de campos, como los rangos de fechas, palabras clave, etc., se añaden mejor directamente a través del API de consulta. Un campo con un límite establecido de valores, que puede especificarse con un menú desplegable, no debería añadirse a una secuencia de consulta que se analiza posteriormente, sino añadirse como cláusula Consulta de términos. Términos Una consulta se desglosa en términos y operadores. Hay dos tipos de términos: términos individuales y frases. Un término individual es una sola palabra, como “test” o “hello”. Una frase es un grupo de palabras rodeado por comillas, como “hello dolly”. Se pueden combinar varios términos con operadores booleanos para formar una consulta más compleja (véase más adelante). Nota: El analizador usado para crear el índice se usará en los términos y frases de la secuencia de consultas. Por eso es importante elegir un analizador que no interfiera con los términos usados en la secuencia de consultas. Campos Lucene es compatible con datos enviados. Al realizar una búsqueda puede especificar un campo o usar el campo predeterminado. La implementación es específica para los 2
nombres de los campos y el campo predeterminado. Puede buscar en cualquier campo escribiendo el nombre del campo seguido de dos puntos ":" y, después, el término que está buscando. Como ejemplo, supongamos que un índice Lucene contiene dos campos, título y texto, y que texto es el campo predeterminado. Si quiere encontrar el documento titulado “The Right Way”, que contiene el texto “don't go this way”, puede escribir: title:"The Right Way" AND text:go o title:"Do it right" AND right Como el texto es el campo predeterminado, el indicador de campo no es necesario. Nota: El campo sólo es válido para el término al que precede directamente, de forma que Quero title:Do it right Sólo encontrará "Do" en el campo del título. Encontrará "it" y "right" en el campo predeterminado (en este caso, el campo de texto). Modificadores de texto Lucene es compatible con la modificación de términos de consulta para proporcionar un amplio rango de opciones de búsqueda. Búsquedas comodín Lucene es compatible con búsquedas de caracteres comodín individuales y múltiples. Para realizar una búsqueda comodín de un solo carácter, use el símbolo "?". Para realizar una búsqueda comodín de varios caracteres, use el símbolo "*". La búsqueda comodín de un solo carácter busca términos que coincidan con el carácter individual que se ha sustituido. Por ejemplo, para buscar "text" o "test" puede usar la búsqueda: te?t La búsqueda comodín de varios caracteres busca 0 ó más caracteres. Por ejemplo, para buscar test, tests o tester, puede usar la búsqueda: test* También puede usar las búsquedas comodín en medio de un término. te*t Nota: No puede usar un símbolo * ni ? como primer carácter de una búsqueda.
3
Búsquedas difusas Lucene es compatible con búsquedas difusas basadas en el algoritmo de la Distancia Levenshtein o en el algoritmo de Distancia de edición. Para realizar una búsqueda difusa, use el símbolo de la tilde, "~", al final de una búsqueda de una sola palabra. Pro ejemplo, para buscar un término que se deletree de forma parecida a "roam" use la búsqueda difusa: roam~ Esta búsqueda encontrará términos como “foam” y “roams”. Búsquedas de proximidad Lucene es compatible con la búsqueda de palabras dentro de una distancia determinada. Para realizar una búsqueda de proximidad, use el símbolo de la tilde, "~", al final de una frase. Por ejemplo, para buscar en un documento "apache" y "jakarta" con una distancia de 10 palabras entre una y otra, use la búsqueda: "jakarta apache"~10 Búsquedas de rango Las búsquedas de rango permiten hacer coincidir documentos cuyos valores de campo o campos se encuentren entre la cota inferior y la cota superior especificadas por la consulta de rango. Las consultas de rango pueden ser inclusivas o exclusivas de las cotas superior e inferior. La clasificación se hace lexicográficamente. mod_date:[20020101 TO 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 no de fecha: title:{Aida TO Carmen} Esto encontrará documentos cuyos títulos se encuentren entre Aída y Carmen, pero no incluirán ni Aída ni Carmen. Las consultas de rango inclusivas están marcadas por corchetes cuadrados. Las consultas de rango exclusivas están marcadas con corchetes de llave. Impulso de un término Lucene proporciona el nivel de relevancia de los documentos coincidentes según los términos encontrados. Para impulsar un término, use el signo circunflejo, "^", con un factor de impulso (un número) a final del término que esté buscando. Cuanto más alto sea el factor de impulso, más relevante será el término. El impulso le permite controlar la relevancia de un documento impulsando su término. Por ejemplo, si está buscando jakarta apache
4
y quiere que el término "jakarta" tenga un impulso más relevante, use el símbolo ^ junto al factor de impulso al lado del término. Escribiría esto: jakarta^4 apache Esto hará que los documentos con el término Yakarta aparezcan con más relevancia. También puede impulsar términos de frase, como en este ejemplo: "jakarta apache"^4 "jakarta lucene" El valor predeterminado del factor de impulso es 1. Aunque el factor de impulso debe ser positivo, puede ser inferior a 1 (por ejemplo, 0,2). Operadores booleanos Los operadores booleanos permiten que los términos se combinen mediante operadores lógicos. Lucene acepta AND, "+", OR, NOT y "-" como operadores booleanos (Nota: los operadores booleanos deben estar COMPLETAMENTE EN MAYÚSCULAS). OR El operador OR es el operador predeterminado de conjunciones. Esto significa que si no hay operador booleano entre dos términos, se usará el operador OR. El operador OR enlaza dos términos y encuentra un documento coincidente si uno de los dos términos se encuentra en un documento. Esto es equivalente a una unión con conjuntos. Puede usarse el símbolo || en lugar de la palabra OR. Para buscar documentos que contengan "jakarta apache" o sólo "jakarta", use la consulta: "jakarta apache" jakarta o "jakarta apache" OR jakarta AND El operador AND hace coincidir documentos en los que estén presentes los dos términos en cualquier lugar del texto de un solo documento. Esto es equivalente a una intersección con conjuntos. Se puede usar el símbolo && en lugar de la palabra AND. Para buscar documentos que contengan "jakarta apache" y "jakarta lucene", use la consulta: "jakarta apache" AND "jakarta lucene" + El símbolo "+" o el operador necesario exigen que el término que aparece después del símbolo "+" exista en algún lugar de un campo de un solo documento. Para buscar documentos que deban contener "jakarta" y puedan contener "lucene", use la consulta: 5
+jakarta apache NOT El operador NOT excluye los documentos que contengan el término que aparece después de NOT. Esto es equivalente a una diferencia con conjuntos. Puede usarse el símbolo ! en lugar de la palabra NOT. Para buscar documentos que contengan "jakarta apache" pero no "jakarta lucene", use la consulta: "jakarta apache" NOT "jakarta lucene" Nota: El operador NOT no se puede usar con sólo un término. Por ejemplo, la siguiente búsqueda no obtendría resultados: NOT "jakarta apache" El símbolo "-" u operador de prohibición excluye los documentos que contengan el término que aparece después del símbolo "-". Para buscar documentos que contengan "jakarta apache", pero no "jakarta lucene", use la consulta: "jakarta apache" -"jakarta lucene" Agrupamiento Lucene es compatible con el uso de paréntesis para agrupar cláusulas y formar subconsultas. Esto puede resultar muy útil si quiere controlar la lógica booleana en una consulta. Para buscar "jakarta" o "apache" y "website", use la consulta: (jakarta OR apache) AND website Esto elimina cualquier confusión y se asegura de que ese sitio web debe existir y de que el término jakarta o el término apache puedan existir. Agrupamiento de campos Lucene es compatible con el uso de paréntesis para agrupar varias cláusulas en un único campo. Para buscar un título que contenga tanto la palabra "return" como la frase "pink panther", use la consulta: title:(+return +"pink panther") Caracteres especiales de escape Lucene es compatible con caracteres especiales de escape que formen parte de la sintaxis de consulta. La lista actual de caracteres especiales es: + - && || ! ( ) { } [ ] ^ " ~ * ? : \ 6
Para escapar este carácter use el símbolo \ antes del carácter. Por ejemplo, para buscar (1+1):2, use la consulta: \(1\+1\)\:2
7