Búsqueda de texto completo

N1QL Y BÚSQUEDA: Aproveche el índice de búsqueda de texto completo (FTS) en N1QL

Con Couchbase v6.5, Full-Text Search está ahora integrado en el constructor de consultas N1QL de Couchbase. Los clientes ahora pueden aprovechar los índices FTS directamente con N1QL. Esto proporciona a los desarrolladores una única API para combinar la coincidencia exacta de predicados N1QL y la potente búsqueda FTS.

El único reto constante para muchos desarrolladores de aplicaciones con bases de datos relacionales es el rendimiento de las consultas. Los problemas de rendimiento de las consultas suelen limitarse a lo que ofrecen las bases de datos relacionales: un servidor de bases de datos más grande o mejores índices.

Con Couchbase, el rendimiento de las consultas N1QL también depende de componentes similares. Pero a diferencia de los RDBMS relacionales, la arquitectura de aislamiento de servicios de Couchbase significa que tanto el servicio de consultas como el de índices pueden escalarse de forma independiente. Con un dimensionamiento y una planificación de la capacidad adecuados, Couchbase puede ofrecer un rendimiento vertiginoso, como se muestra en el siguiente ejemplo. Evaluación comparativa de Altoros NoSQL informe.

Más allá de los predicados de consulta - N1QL y la búsqueda

Los clientes pueden alcanzar tiempos de respuesta de milisegundos para consultas con índices apropiados. Sin embargo, hay ocasiones en las que los predicados de consulta utilizados por los índices GSI de Couchbase no se conocen de antemano. La solución ideal es disponer de un sistema de indexación que pueda funcionar con cualquier combinación de los predicados de consulta disponibles.

Couchbase Adaptive Indexing puede abordar muchos de estos casos de uso. Couchbase Full-Text Search es otra aproximación a los casos de uso de patrones irregulares. Ofrecen capacidades de búsqueda de texto y difusa en cualquier campo del documento.

Consideremos el siguiente documento de gestión de actividades. Una actividad:

  1. Pertenecer siempre a un cliente (cuenta)
  2. También puede tener varios contactos de la organización del cliente y están representados por una matriz de contactos
  3. Puede incluir múltiples participantes, representados por una serie de usuarios.
  4. Puede ser de tipo cita o tarea, ambos con sus correspondientes atributos específicos, como título, fecha de inicio, fecha de vencimiento, etc.
  5. Una actividad de tipo Task tiene un array de ToDo list

sample json document for examples sample documents for examples

El caso práctico

John, un representante de servicio de un centro de llamadas de Acme Ltd necesita recuperar todas las actividades del cliente mientras está al teléfono con un cliente. El cliente puede proporcionar uno o varios de los siguientes valores para que John consulte la aplicación:

  1. Título de la actividad: La consulta debe devolver todas las actividades que tengan este texto, en cualquier parte del título de la actividad.
  2. Nombre del cliente: El nombre del cliente introducido puede estar incompleto, por lo que la consulta debe utilizar un comodín para que coincida con el nombre del cliente.
  3. Nombre, correo electrónico o teléfono de contacto: El cliente también puede facilitar los datos de la persona de contacto. Estos también pueden estar incompletos.
  4. Un nombre de participante: El cliente también puede facilitar el nombre del gestor de la cuenta, un empleado de Acme con el que el cliente ha interactuado y que ha participado en la actividad.
  5. Fecha de la actividad: El cliente puede proporcionar un intervalo de fechas y horas para las actividades.
  6. El representante de servicio puede recibir una o varias de las informaciones anteriores. El patrón no es fijo.
  7. El tiempo de respuesta de la consulta debe ser de ~1 seg.
  8. El volumen de datos es de 3 millones al año y el periodo de conservación de 3 años.

¿Cuáles son los retos para recuperar esta información?

  1. El cliente puede proporcionar hasta ocho campos, y ninguno de ellos es obligatorio. Esto supondría un reto para el diseño eficiente de un índice GSI, ya que la clave principal del índice debe estar presente para la selección del índice. Como resultado, los índices GSI no pueden cubrir todos los casos.
  2. Coincidencia de comodines: El título de la actividad, el nombre del cliente y del contacto, el correo electrónico o el teléfono pueden estar incompletos, por lo que no funcionará una técnica de coincidencia de predicado N1QL exacta.
  3. Tanto los contactos como los participantes son objetos hijos de las actividades. En el modelo de datos JSON, los contactos y los participantes se representan como dos matrices separadas. Si necesitamos un índice de cobertura, debe incluir uno o más elementos de ambas matrices.

Las soluciones

1. El enfoque más sencillo es utilizar predicados N1QL:

También se requerirían los siguientes índices GSI:

Tenga en cuenta que la consulta anterior puede utilizar uno o todos los índices disponibles para mejorar el rendimiento de la consulta. Sin embargo, todavía podría haber problemas de rendimiento debido a la necesidad de que el plan de consulta utilice la operación IntersectScan.

2. Apalancamiento Índice FTS

Couchbase Full-Text Search podría ayudar con este caso de uso, debido a su capacidad de búsqueda no exacta, así como la capacidad de buscar en los campos en cualquier orden. He aquí un índice FTS que puede cubrir los criterios de búsqueda.

couchbase dialog for setting up a full text search index

2.1 Usando CURL - Esto es soportado en Couchbase 5.5

2.2 Con integración N1QL/FTS mediante SEARCH_QUERY

2.3 Con integración N1QL/FTS mediante el predicado SEARCH de N1QL

Notas:

  1. El ejemplo anterior aprovecha la consulta compuesta FTS con la construcción conjunct para combinar todos los predicados en un único SEARCH(). Consulta la documentación de Couchbase FTS para más detalles sobre FTS Tipo de consulta
  2. El enunciado anterior debe construirse mediante programación para incluir sólo los predicados de búsqueda necesarios.
  3. El diseño del índice FTS debe incluir los campos que se utilizan en SEARCH()
  4. El predicado N1QL a.type='actividad' debe estar presente en la consulta para la selección del índice FTS

N1QL SEARCH_QUERY y SEARCH predicate es parte de la característica N1QL/FTS Integration disponible en Couchbase v6.5 y actualizaré el blog con la documentación cuando esté disponible.

Para más detalles sobre la sintaxis de la consulta FTS https://docs.couchbase.com/server/6.0/fts/full-text-intro.html

N1QL y resumen de búsqueda:

  1. La integración N1QL/FTS permite que una consulta utilice la construcción de búsqueda FTS directamente como predicados de búsqueda.
  2. El uso del índice FTS en la consulta N1QL alivia la necesidad de disponer de un índice exacto para cada patrón de consulta
  3. N1QL/FTS ofrece a los desarrolladores una opción adicional para resolver los problemas de rendimiento de las consultas
  4. El índice FTS es adecuado cuando se necesita buscar en varios campos en cualquier orden.
  5. El índice FTS se adapta bien a los casos en los que hay que buscar campos en varias matrices

Recursos

Nos encantaría que nos dijera qué le han parecido las funciones de la versión 6.5 y en qué beneficiarán a su empresa en el futuro. Por favor, comparta su opinión a través de los comentarios o en el foro.

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

Autor

Publicado por Binh Le

Binh Le es director de producto principal del servicio de consultas de Couchbase. Antes de Couchbase, trabajó en Oracle y dirigió el equipo de gestión de productos para Sales Clould Analytics y CRM OnDemand. Binh es licenciado en Informática por la Universidad de Brighton, Reino Unido.

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.