query examples regex solr edismax

regex - examples - ¿Qué funciones de expresiones regulares son compatibles con Solr edismax?



solr like query syntax (2)

La versión 4.0 de Lucene admitirá las consultas de expresiones regulares directamente en el analizador de consultas estándar utilizando una sintaxis especial. Verifiqué que funciona en una instancia de Solr que estoy ejecutando, construida desde el tronco de subversión en febrero.

El ticket 2604 de Jira describe la extensión del analizador de consultas estándar utilizando una sintaxis especial de expresiones regulares, utilizando barras diagonales para delimitar la expresión regular, similar a la sintaxis en Javascript. Parece estar usando el analizador RegexpQuery subyacente.

Entonces un breve ejemplo:

body:/[0-9]{5}/

coincidirá en un código postal de cinco dígitos en el corpus textual que he indexado. Pero, curiosamente, body: / ​​/ d {5} / no funcionó para mí, y ^ también falló.

El dialecto de expresiones regulares tendría que ser de Java, pero no estoy seguro de si todo funciona, ya que solo hice un examen superficial. Probablemente, uno debería mirar cuidadosamente el código RegexpQuery para entender qué funciona y qué no.

Las expresiones regulares permiten la sintaxis de coincidencia de patrones que se muestra a continuación. Estoy tratando de implementar una poderosa herramienta de búsqueda que implemente tantos de estos como sea posible. Me dijeron que edismax es la herramienta más flexible para el trabajo. ¿Cuál de las siguientes expresiones de coincidencia de patrones se puede lograr con edismax? ¿Puedo hacerlo mejor que edismax? ¿Puede sugerir qué filtros y parches de analizador puedo utilizar para lograr esta funcionalidad? ¿Estoy soñando si creo que Solr puede lograr un rendimiento aceptable (es decir, el tiempo de procesamiento del lado del servidor) de este tipo de búsquedas?

sintaxis de expresiones regulares y ejemplos de mysql

  1. ^ coincide con el comienzo de la cadena. ''fofo'' REGEXP ''^fo'' => true
  2. $ match al final de la cadena. ''fo/no'' REGEXP ''^fo/no$'' => true
  3. * 0-wildcard ilimitado. ''Baaaan'' REGEXP ''Ba*n'' => true
  4. ? 0-1 comodín. ''Baan'' REGEXP ''^Ba?n => false''
  5. + 1-comodín ilimitado. ''Bn'' REGEXP ''Ba+n'' => false
  6. | o. ''pi'' REGEXP ''pi|apa'' => true
  7. () * coincidencia de secuencia. ''pipi'' REGEXP ''^(pi)*$'' => true
  8. [a-dX], [^ a-dX] rango de caracteres / set ''aXbc'' REGEXP ''[a-dXYZ]'' => true
  9. {n} o {m, n} notación de cardinalidad ''abcde'' REGEXP ''a[bcd]{3}e'' => true
  10. [: ''justalnums'' REGEXP ''[[:alnum:]]+'' => true :] ''justalnums'' REGEXP ''[[:alnum:]]+'' => true

Las expresiones regulares y (e) dismax no son realmente comparables. Dismax está diseñado para trabajar directamente con la entrada común del usuario final, mientras que las expresiones regulares no son entradas típicas del usuario final.

Además, emparejar cosas parecidas a expresiones regulares con dismax depende en gran medida de las configuraciones de análisis de texto y del diseño del esquema, no de la propia dismax. Con Solr normalmente adapta el análisis de esquema y texto a la necesidad de búsqueda concreta, posiblemente haciendo gran parte del trabajo en tiempo de índice. Las expresiones regulares están en desacuerdo con esto e incluso con la estructura básica de los índices invertidos de Lucene.

Aún así, Lucene proporciona RegexQuery y el RegexpQuery más nuevo . Hasta donde yo sé, estos no están integrados con Solr, pero podrían serlo. ¡Comience un nuevo artículo en el rastreador de problemas de Solr y feliz codificación! :)

Tenga en cuenta que las consultas de expresiones regulares probablemente siempre serán lentas ... pero podrían tener un rendimiento aceptable en su caso.