Vista previa de la búsqueda de texto completo en Couchbase utilizando el SDK de Java

En esta entrada del blog, echaremos un vistazo a la API de vista previa para la búsqueda de texto completo en Couchbase 4.5. Tenga en cuenta que esta API, publicada en el último SDK de Java  (2.2.4), sigue siendo @Experimental.

Cubriremos:

Esta API experimental se puede utilizar con Couchbase Server 4.5 Developer Preview, siempre que se utilice la extensión 2.2.4 Java SDK client, que puedes obtener a través de Maven. Añada la siguiente dependencia a su pom.xml:

¿Búsqueda de texto completo en Couchbase?

Sí. El próximo 4.5 (nombre en clave Watson) incluirá un indexador de texto completo (FTS, también conocido como CBFT) basado en el programa de código abierto Bleve proyecto. Bleve trata sobre la búsqueda de texto completo y la indexación en Go (un saludo a nuestro propio Marty Schoch por iniciar este proyecto).

La idea es aprovechar Bleve para proporcionar una búsqueda de texto completo off-the-shelf en Couchbase Server, sin tener que utilizar conectores a software externo (que se ejecuta en su propio clúster). Si esa solución "off-the-shelf" no satisface sus necesidades hasta el final, por supuesto, todavía puede utilizar estos conectorespero para las necesidades más sencillas se puede optar por una única solución.

FTS ofrece una gran cantidad de capacidades que son proporcionadas por Bleve: Analizadores de texto, tokenizadores y filtros de tokens de posprocesamiento que van más allá del alcance de este post, así como los numerosos tipos de consultas que puede ejecutar en los índices resultantes. Veamos cuáles son esos tipos y cómo puedes esperar utilizarlos en el contexto del SDK de Java.

En el resto de esta entrada de blog, utilizaremos 3 índices que podrá crear a través de la consola de administración web en la próxima versión 4.5 Developer Preview:

Esta es la lista de índices de la interfaz de usuario:

Tenemos:

  • a beerIndex que indexa todo el contenido de cada documento del cerveza-muestra cubo.
  • a travelIndex que indexa todo el contenido de cada documento del viaje-muestra cubo.
  • un índice de alias, commonIndexque es una unión de los dos índices anteriores.

La API de Java

El punto de entrada de la función de búsqueda de texto completo en el SDK de Java se encuentra en la carpeta Cuboutilizando el query(SearchQuery ftq) método. Esto es coherente con los métodos de consulta existentes ya presentes en la API para ejecutar un ViewQuery o un N1qlQuery.

La API para la búsqueda de texto completo sigue el constructor patrón. Identifique el tipo de consulta que desea y utilice el constructor correspondiente para construirla, obtenga la función BúsquedaQuery utilizando construir() y ejecutarlo utilizando bucket.query(searchQuery).

Tomemos un ejemplo (muy sencillo) y veamos cómo se puede consumir:

Si examinamos cada sección por separado, esto es lo que ocurrió:

  1. Creamos un sencillo MatchQuery en un solo plazo.
  2. Se ejecuta en la muestra de cerveza (.on(beerIndex), busca apariciones textuales de la palabra "nacional" (.query("nacional")) o términos cercanos.
  3. Se realiza una configuración adicional para limitar el número de resultados a 3 (límite(3)) y la consulta propiamente dicha se crea en este punto (.construir()).
  4. La consulta se ejecuta (bucket.query(ftq)) y devuelve un SearchQueryResult.
  5. Emitimos el resultado de totalHits() y las filas individuales (también accesibles como lista a través de aciertos()).

Ejecutando ese código sale:

Vemos que el total de visitas nos da el número real de visitas antes de que se aplicara el límite. La dirección aciertos() devuelve 3 BúsquedaQueryRow objetos, según lo solicitado.

Cada acierto contiene la clave del documento asociado en Couchbase (id()), así como más información sobre la coincidencia, por ejemplo, una puntuación para la coincidencia (puntuación())... Si lo desea, puede recuperar el documento asociado utilizando bucket.get(fila.id()):

Esto nos da, para el primer golpe:

Si observamos detenidamente el JSON del documento, nos daremos cuenta de dónde probablemente coincidía el documento. En el campo "descripción" del documento, aparece esta frase:

La primera cervecería que abrió sus puertas en nacióndesde la Prohibición.

Observe también que la consulta de texto buscó la palabra solicitada y las palabras derivadas que tienen la misma raíz. En realidad, aplicó una imprecisión de 2 (véase la sección siguiente).

Este patrón también puede aplicarse a otros tipos de consulta, así que veamos algunos más para ver qué tipo de búsqueda puede realizarse.

Varios tipos de consultas

Consulta difusa

La consulta difusa puede realizarse con la función MatchQueryespecificando un Distancia Levenshtein como máximo imprecisión() permitir en el plazo:

A un nivel de 2Esto coincide con palabras como "martillo", "mamá" o "verano":

A un nivel de 1no se encuentra ninguna coincidencia:

También se ofrece un tipo de consulta dedicada a la imprecisión y que no aplica ningún analizador en el FuzzyQuery.

Términos múltiples: MatchPhrase

Como hemos visto, MatchQuery es una consulta basada en términos que permite especificar opcionalmente la imprecisión y también aplica al término buscado el mismo filtro que se haya podido aplicar al campo (por ejemplo, stemming, etc...):

Puede buscar varios términos en una sola consulta utilizando un atributo Frase de partido consulta. Se analizan los términos y se puede activar opcionalmente la imprecisión:

Consulta Regexp

A RegexpQuery no sólo hace coincidencias literales, sino que permite hacer coincidencias utilizando una expresión regular. Tome este ejemplo:

Observe que esta consulta se dirige a un campo concreto del archivo json (campo("nombre")). Queremos todos los nombres que contengan "cuento" o "pálido". He aquí algunos nombres que coinciden con esta búsqueda:

Prefijo Consulta

A PrefixQuery busca apariciones de palabras que empiecen por la cadena dada:

Una vez más, sólo miramos dentro del nombre campo, esta vez para las palabras que empiezan por "weiss":

Consultas por rango y fecha

FTS también funciona bien con datos no textuales. Por ejemplo, el NumericRangeQuery permite buscar valores numéricos dentro de un intervalo proporcionado:

Qué salidas:

Las fechas también se cubren con el DateRangeQuery:

Qué salidas:

Consulta genérica

FTS también ofrecen una forma más genérica de consulta que combina frases, términos y más utilizando la función Cadena Sintaxis de consulta. Se puede acceder a él en la API a través de la función StringQuery.

Combinación de

Además, puede combinar criterios sencillos como MatchQuery mediante consultas combinadas. Tomando estas dos simples consultas de términos:

Puedes combinarlos de diferentes maneras:

  • a conjunción busca todos los términos
  • a disyunción busca al menos un término
  • a consulta booleana permite combinar los dos enfoques

Obtener explicaciones de los aciertos

Si desea obtener información sobre la puntuación y el emparejamiento de un determinado BúsquedaQueryRowpuede construir su consulta utilizando la función .explain(true) y obtener los detalles del índice en el parámetro explicación() campo:

Conclusión

Esperamos que este avance de la API haya despertado su interés.

Descárguese el primer Vista previa para desarrolladores de Couchbase 4.5 con servicio integrado de búsqueda de texto completo. Esperamos que pueda empezar a buscar rápidamente utilizando el servicio asociado API del SDK de Java.

Y hasta entonces... ¡Feliz codificación!
El equipo del SDK de Java

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

Autor

Publicado por Simon Basle, Ingeniero de Software, Pivotal

Simon Basl_ es un Ingeniero de Software residente en París que trabaja en el equipo Spring de Pivotal. Anteriormente, trabajó en el equipo de Couchbase Java SDK. Sus intereses abarcan aspectos de diseño de software (OOP, patrones de diseño, arquitectura de software), clientes ricos, lo que hay más allá del código (integración continua, (D)VCS, mejores prácticas) y programación reactiva. También es editor de la versión francesa de InfoQ.com.

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.