Couchbase Mobile 2.0, introduce potentes capacidades de Búsqueda de Texto Completo (FTS) en tus Documentos JSON. Esto es parte de la nueva interfaz de consulta basada en N1QLel lenguaje de consulta declarativo de Couchbase que extiende SQL para JSON. Si estás familiarizado con SQL, te sentirás como en casa con la semántica de la nueva API.

La búsqueda de texto completo permite realizar consultas en lenguaje natural. Este es el tercero de una serie de posts que discuten la interfaz de consulta en Couchbase Lite. Este blog asume que estás familiarizado con los fundamentos, así que si aún no lo has hecho, asegúrate de revisar la sección entrada anterior primero. Si le interesa, al final de esta entrada encontrará enlaces a blogs en los que se tratan otras características de la interfaz de consulta.

Puede descargar la última versión preliminar de Couchbase Mobile 2.0 desde aquí.

Fondo

Si estabas usando versiones 1.x de Couchbase Mobile, probablemente estés familiarizado con Map-Views para crear índices y consultas. En la versión 2.0, ya no es necesario crear vistas y funciones de mapa. En su lugar, una sencilla interfaz le permite crear índices y puede utilizar una interfaz Query Builder para construir sus consultas. En comparación, la nueva interfaz de consulta es más sencilla de utilizar y mucho más potente. Descubriremos algunas de sus características en este post.

Ejemplo de proyecto

Aunque en los ejemplos que se exponen aquí se utiliza Swift para iOS, tenga en cuenta que, salvo algunas pequeñas diferencias, la misma interfaz de consulta es compatible también con las plataformas Android y Windows.

Así que, con unos pequeños ajustes, deberías poder reutilizar los ejemplos de consulta de este artículo cuando trabajes con otras plataformas.

Siga las instrucciones siguientes si está interesado en un proyecto Swift de muestra

  • Clonar el iOS Swift Playground desde GitHub
  • Siga las instrucciones de instalación en el LÉAME para construir y ejecutar la zona de juegos.

Modelo de datos de muestra

Utilizaremos la base de datos de muestras de viajes aquí. Puede incrustar esta base de datos preconstruida en su aplicación móvil y empezar a utilizarla para sus consultas.

El conjunto de datos de la muestra incluye varios tipos de documentos identificados por el tipo del documento. Nos centraremos en documentos de tipo "hito" . A continuación se muestra el modelo de documento JSON. Por brevedad, hemos omitido algunas de las propiedades que no son relevantes para este post del modelo a continuación.

** Consulte el modelo anterior para cada uno de los ejemplos de consulta a continuación. **

El asa de la base de datos

En las consultas siguientes, utilizaremos la función Base de datos API para abrir/crear Base de Datos CouchbaseLite.

Conceptos básicos

La búsqueda de texto completo permite realizar consultas en lenguaje natural. En nuestro post sobre la Fundamentos de la consultadiscutimos el como y regex para operaciones de concordancia de patrones. FTS supera esa capacidad al permitir la compatibilidad con de origen, clasificación por relevancia y consultas en lenguaje natural específicas de la localidad.

Las búsquedas de texto completo son no distingue mayúsculas de minúsculas y utilizar el match expresión de consulta. Para realizar FTS, debe crear Índice de texto completo en las propiedades apropiadas. Puede crear índices en una o varias propiedades.

Stemming

Antes de pasar a los ejemplos, hablemos de la separación de palabras. Se trata de reducir las palabras a su raíz. Así, para instancia"gatuno", "gatuno" y "gatos" se reducen a la palabra "gato". Así, la búsqueda del término "gatos" nos daría resultados que coincidirían con "gatuno", "gatuno" y así sucesivamente.

Couchbase Lite actualmente soporta Stemming en los siguientes idiomas
* danish
* dutch
* español
* finlandés
* francés
* alemán
* húngaro
* italiano
* noruego
* portugués
* rumano
* ruso
* español
* sueco
* turco

Si no se utiliza ningún idioma específico, el tokenizador seguirá dividiendo el texto en palabras a partir de los caracteres Unicode de espacio en blanco. Así que debería funcionar, aunque menos bien, con cualquier idioma que ponga espacios entre palabras.

Índice de texto completo

En nombre que se asocia al índice durante la creación es importante. Los ejemplos de consulta que veremos más adelante harán referencia al índice apropiado mediante el nombre

Índice de propiedades individuales

El siguiente ejemplo crea un fullTextIndex en el "contenido" propiedad de un Documento. El "stemming" está activado por defecto y se asume que la configuración regional es la del dispositivo. Aunque no se muestra a continuación, también tiene la opción de especificar si los "acentos" deben ignorarse o no mediante la opción ignoreAccents opción. Por defecto, los acentos no se ignoran.

Índice de propiedades múltiples

El siguiente ejemplo crea un fullTextIndex en "contenido" y "nombre" propiedades de un Documento

Índice sin stemming

El siguiente ejemplo crea un fullTextIndex en el "contenido" propiedad de un Documento con el stemming desactivado. El stemming se activa por defecto utilizando la configuración actual del idioma del dispositivo. Si el idioma es nulo, se desactiva el stemming.

Búsqueda FTS con stemming

La siguiente consulta recupera los id y contenido propiedades de "hito" tipo documentos que contengan el término "Mecánica" en el "contenido" propiedad. Utilizamos la "ContentFTSIndex" que se creó anteriormente.

Solicitar

Muestra de respuesta

La respuesta a la consulta anterior incluirá documentos que contengan los términos "mecánico", "mecanismo", "mecanismos", "mecánico", etc.

Búsqueda FTS sin Stemming

La siguiente consulta recupera los id y contenido propiedades de "hito" tipo documentos que contienen el término exacto "Mecánica" en el "contenido" propiedad. Utilizamos la "ContenidoFTSIndexNoStemming" que se creó anteriormente y que especificaba la opción de desactivar el stemming.

Solicitar

Muestra de respuesta

La respuesta a la consulta anterior incluirá documentos que contengan exactamente el término "mecánico". Tenga en cuenta de nuevo que todas las búsquedas son insensibles a mayúsculas y minúsculas.

Búsqueda FTS en varias propiedades

La siguiente consulta recupera los id , nombre y contenido propiedades de "hito" tipo documentos que contengan el término "Mecánica" en el "nombre" o el "contenido" propiedad. Utilizamos la "ContentAndNameFTSIndex" creado anteriormente. Este índice permitía indexar el "nombre" y "contenido" propiedades

Solicitar

Muestra de respuesta

La respuesta a la consulta anterior incluirá los documentos que contengan el término "mecánico" (o sus variantes derivadas por stemming) en la propiedad "nombre" o "contenido".

Búsqueda FTS con expresiones lógicas

En un ejemplo anterior, has visto que desactivando el stemming, puedes buscar la cadena de búsqueda exacta. Pero, ¿y si quiere buscar más de un término de búsqueda? En match acepta expresiones lógicas como AND y OR.

La siguiente consulta recupera los id y contenido propiedades de "hito" tipo documentos que contengan el término "Mecánica" o "Mecanismo" en el "contenido" propiedad. Utilizamos la "ContenidoFTSIndexNoStemming" que se creó anteriormente para desactivar el stemming.

Solicitar

Muestra de respuesta

La respuesta a la consulta anterior incluirá los documentos que contengan exactamente los términos "mecánico" o "mecanismo" en la propiedad "contenido".

Búsqueda FTS con expresión Wilcard

Puede utilizar el carácter "*" en la cadena de búsqueda para representar coincidencias de cero o más caracteres.

La siguiente consulta recupera los id y contenido propiedades de "hito" tipo documentos que contengan el término "walt*" en el "contenido" propiedad. Esto coincidirá con todos los términos de búsqueda que empiecen por "walt" seguido de cero o más caracteres. Utilizamos la propiedad "ContentFTSIndex" que se creó anteriormente.

NOTA: Se podría argumentar que el uso de comodines en el término de búsqueda podría ser una forma ingenua de aplicar la derivación. Pero entonces se puede acabar con formas derivadas que pueden no corresponder a los términos derivados mediante stemming. Así que es preferible utilizar stemming si eso es lo que necesita.

Solicitar

Muestra de respuesta

La respuesta a la consulta anterior incluirá documentos que contengan los términos "walt", "Walter", "Waltham", "Walthamstow", etc.

Búsqueda FTS con palabras clave

Las stop words son palabras comunes en un idioma. En inglés, serían términos como "the", "is", "and" , "which", etc.

Ejemplo 1: La cadena de búsqueda contiene palabras vacías

Couchbase Lite ignora las palabras de parada que aparecen en la cadena de búsqueda.

La siguiente consulta recupera los id y contenido propiedades de "hito" tipo documentos que contengan el término "en la historia" en el "contenido" propiedad. Utilizamos la "ContentFTSIndex" que se creó anteriormente.

Couchbase Lite ignora las palabras de parada "on" y "the", por lo que obtendrá documentos que sólo incluyan el término "history" y las formas derivadas de la palabra raíz

Solicitar

Muestra de respuesta

La respuesta a la consulta anterior incluirá los documentos que contengan los términos "historia" y las formas derivadas de esta palabra, como "histórico".

Ejemplo 2: Ignorar las palabras vacías en la búsqueda

Por defecto, Couchbase Lite ignora las palabras de parada dentro del contenido de la búsqueda.

La siguiente consulta recupera los id y contenido propiedades de "hito" tipo documentos que contengan los términos "aleta azul aleta amarilla" en el "contenido" propiedad. Utilizamos la "ContentFTSIndex" que se creó anteriormente.

Couchbase Lite ignora las palabras de parada durante la búsqueda, por lo que obtendría documentos que incluyeran los términos "azul", "aleta" y "amarillo" en ese orden, separados por cualquier número de palabras de parada.

Solicitar

Muestra de respuesta

La respuesta a la consulta anterior incluirá documentos que contengan los términos "azul", "aleta" y "amarillo" separados por cualquier número de palabras de parada, como "aleta azul y aleta amarilla".

Búsqueda FTS con clasificación

Puede utilizar la función FunciónTextoCompleto.rank para especificar el orden de clasificación de los resultados de la búsqueda. Esto es útil para clasificar las coincidencias por orden de mejor coincidencia.

La siguiente consulta recupera los id y contenido propiedades de "hito" tipo documentos que contengan el término "atraer" en el "contenido" propiedad. Los documentos se ordenan en orden descendente según su rango, lo que significa que el documento con el mayor número de coincidencias se ordena por encima del resto.

Solicitar

Muestra de respuesta

La respuesta a la consulta anterior incluirá los documentos que incluyan el término "atraer" o sus versiones derivadas. Los documentos con el mayor número de coincidencias se clasifican en orden superior.

Limitaciones

Aunque la capacidad de FTS en Couchbase Lite 2.0 es extremadamente potente y sería suficiente para los casos de uso típicos en una base de datos integrada, hay algunas limitaciones

  • La expresión de coincidencia sólo puede estar en el nivel superior o en la expresión AND del nivel superior. Esto significa que la siguiente expresión no está permitida ftsExpression.match("atraer").or(ftsExpression2.match("museo"))
  • Tokenizadores lingüísticos personalizados
    La lista de idiomas soportados se especificó anteriormente. En el momento de escribir este post, no es posible conectar un tokenizador personalizado para ampliar la compatibilidad a otros idiomas.
  •  Soporte de búsqueda difusa
    No podemos especificar un factor de "imprecisión" en la consulta que pueda dar lugar a que se consideren coincidencias menos relevantes.
  •  Facetas
    No hay soporte para la búsqueda facetada

Ten en cuenta que Couchbase Lite es una base de datos integrada. Así que se podría argumentar que las capacidades de FTS no tienen que ser tan extensas como una implementación de base de datos del lado del servidor. El soporte para estas será evaluado en futuras versiones.

¿Qué sigue?

Esta entrada de blog muestra cómo puedes aprovechar las capacidades de Búsqueda de Texto Completo (FTS) en la nueva API de Consulta en Couchbase Mobile 2.0. Esto es un comienzo. Espera ver más funcionalidades en futuras versiones. Puedes descargar la última versión de nuestra descargas página.

Aquí hay algunos otros posts relacionados con Couchbase Mobile Query que pueden ser de interés
- Este entrada del blog analiza los fundamentos
- Este entrada del blog explica cómo consultar colecciones de matrices
- Este entrada del blog explica cómo realizar consultas JOIN

Si tiene alguna pregunta o sugerencia, deje un comentario a continuación o póngase en contacto conmigo en Twitter @rajagp o envíeme un correo electrónico priya.rajagopal@couchbase.com. En Foros de Couchbase son otro buen lugar para plantear preguntas.

 

Autor

Publicado por Priya Rajagopal, Directora de Gestión de Productos

Priya Rajagopal es directora sénior de gestión de productos en Couchbase y responsable de las plataformas de desarrollo para la nube y el perímetro. Lleva más de 20 años dedicándose profesionalmente al desarrollo de software en varios puestos de liderazgo técnico y de producto, con más de 10 años centrados en tecnologías móviles. Como delegada de estándares IPTV de TISPAN, fue una colaboradora clave en las especificaciones de estándares IPTV. Tiene 22 patentes en las áreas de redes y seguridad de plataformas.

Dejar una respuesta