JSON distingue entre mayúsculas y minúsculas. Usted no tiene que hacerlo.

Un RoSe en cualquier otro caso olería igual de dulce. William Shakespeare

Debes haber aprendido normas de capitalización en su escuela de gramática, pero la búsqueda en el mundo real no es tan sensible a las mayúsculas. Charles de Gaulle utiliza minúsculas para la "de" intermedia, Tony La Russa utiliza mayúsculas para "La" - puede haber razones etimológicas para ello, pero es poco probable que su agente de servicio al cliente lo recuerde.   Las bases de datos tienen varias sensibilidades. SQL, por defecto, no distingue entre mayúsculas y minúsculas en los identificadores y palabras clave, pero sí en los datos. JSON distingue entre mayúsculas y minúsculas tanto en los nombres de campo como en los datos. Lo mismo ocurre con N1QL. JSON puede tener lo siguiente. N1QL select-join-proyectará cada campo y valor como un campo y valor distintos.

En este artículo hablaremos de cómo hacer frente a distinción entre mayúsculas y minúsculas en los datos. Sus referencias de campo siguen siendo distingue entre mayúsculas y minúsculas. Si usa el caso incorrecto para el nombre del campo, N1QL asume que este es un campo faltante y asigna el valor FALTANTE a ese campo.

Consideremos un predicado simple en N1QL para buscar todas las permutaciones de casos.

Esto requiere siete búsquedas diferentes en el índice. "John" requiere más búsquedas en el índice y "Fitzerald" aún más. Existe una forma estándar de hacerlo. Basta con crear un índice bajando el caso del campo y el literal.

Esta búsqueda puede hacerse más rápida creando el índice con la expresión correcta.

Asegúrese de que su consulta está recogiendo el índice correcto y empuja el predicado a la exploración del índice. Y esa es la idea. Las consultas que tienen predicados empujados a la exploración del índice se ejecutan mucho más rápido que las consultas que no. Esto es cierto para los predicados y cierto empuje agregado también.

Insensibilidad a los casos en un escenario de índice compuesto.

Insensibilidad a mayúsculas y minúsculas en funciones Array.

Funciones de cadena como SPLIT(), SUFFIXES(), muchas de las funciones de matriz y funciones del objeto sí devuelven matrices. Entonces, ¿cómo utilizarlos sin distinguir entre mayúsculas y minúsculas?

Seguimos el mismo principio que antes. Crea primero una expresión para minusvalorar los valores antes de procesarlos mediante estas funciones. 

Ahora, lo que realmente quieres es filtrar en base a un valor dentro de la cadena.

Este es probablemente el peor predicado en SQL - en términos de rendimiento.

Ahora, ¿qué índice crearías para esto?  CONSEJO es muy útil.

Como de costumbre, verifique su explicación.

Si desea utilizar UNNEST y una cláusula WHERE sencilla, utilice esta consulta. Verifique siempre su explicación para asegurarse de que los predicados son empujados a la exploración del índice.

Uso de fichas 

La función TOKENS() simplifica la obtención de las minúsculas tomando esa opción como argumento. Véase el artículo Más que LIKE: Búsqueda eficiente en JSON con N1QL para más detalles y ejemplos

Expresiones complejas.

¿Cómo podemos optimizarlo? Index Advisor al rescate. Otra vez.

Explicar para confirmar el plan:

Búsqueda de textos completos

Como te habrás dado cuenta, se trata de un problema de procesamiento y consulta de texto. El FTS puede escanear, almacenar y buscar texto de varias maneras. La búsqueda insensible a mayúsculas y minúsculas es una de ellas. Veamos el plan para una simple consulta de búsqueda.

Este NO es el plan que quieres... ¡Esto es usar un escáner primario!

Después de crear el índice de texto en el cliente cubo, las cosas van mucho mejor:

El analizador estándar por defecto baja todos los tokens y por lo tanto encontrará todos los "joe "s : JOE, joe, Joe, JOe, etc. Puede definir un analizador personalizado y proporcionar instrucciones específicas para minusvalorar los tokens. He aquí un ejemplo.

Así es como se añade en la interfaz de usuario. Ver blog fino 8 formas de personalizar los índices de búsqueda de texto completo de Couchbase para más detalles sobre las distintas formas de personalizar el índice FTS.

 

 

 

 

 

 

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Keshav Murthy

Keshav Murthy es Vicepresidente de Couchbase R&D. Anteriormente, estuvo en MapR, IBM, Informix, Sybase, con más de 20 años de experiencia en diseño y desarrollo de bases de datos. Dirigió el equipo de I+D de SQL y NoSQL en IBM Informix. Ha recibido dos premios President's Club en Couchbase y dos premios Outstanding Technical Achievement en IBM. Keshav es licenciado en Informática e Ingeniería por la Universidad de Mysore (India), es titular de diez patentes estadounidenses y tiene tres pendientes.

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.