Hoy nos complace anunciar mejoras significativas en la búsqueda de texto completo (FTS) en Servidor Couchbase 4.6. Este blog describe las novedades de la búsqueda en 4.6:

  1. Mejoras de rendimiento
  2. Asignación de tipos de índice por clave
  3. Clasificación personalizada

Couchbase Server FTS se ejecuta sin problemas a través de su clúster y proporciona capacidades de búsqueda similares a Elasticsearch.  FTS "simplemente funciona" distribuido - no tienes que hacer nada especial para ejecutar búsqueda multinodo distribuida a través de tu cluster - lo gestionas de la misma forma que los usuarios esperan de Couchbase Server. Por ejemplo, puedes añadir hardware, reequilibrar, y Couchbase Server distribuye los índices a través del cluster para que los nuevos nodos empiecen a manejar la carga de trabajo de búsqueda. Esto es parte del objetivo: hacer la búsqueda simple, tanto para desarrolladores como para administradores.

Ten en cuenta que FTS está en la versión preliminar para desarrolladores y permanecerá así incluso después de que Couchbase Server 4.6 pase a GA. Te invitamos a probarlo y a compartir tus comentarios.

http://www.couchbase.com/blog/2016/november/introducing-couchbase-server-4.6.0-developer-preview

Búsqueda más rápida

Notará que la búsqueda es más rápida y eficiente con los recursos en 4.6 en comparación con versiones anteriores. Esta versión aporta mejoras en todo el sistema, tanto en el propio FTS como en blevela biblioteca Go de búsqueda e indexación de texto completo que impulsa FTS.
El principal responsable de las mejoras de rendimiento es MossStore, el nuevo mecanismo de almacenamiento kv por defecto para índices de texto completo en FTS. MossStore forma parte de Musgo ("Segmentos ordenados orientados a memoria"), una colección de valores clave ordenada, sencilla, rápida y persistente implementada como una biblioteca Golang pura. Moss mejora el rendimiento de las consultas y especialmente de la indexación ordenando los segmentos del índice en memoria antes de persistirlos. MossStore tiene una ventaja clave sobre los almacenes KV genéricos y es que los segmentos siempre están ordenados, por lo que MossStore no tiene que reordenarlos. MossStore se recomienda para todos los casos de uso.
Para la próxima versión se prevén aún más mejoras de rendimiento. Permanezca atento.

Asignación de tipos de índice por clave

Ahora puede crear asignaciones de índices personalizadas utilizando la clave del documento para determinar el tipo. El mapeo de índices es el proceso de especificar las reglas para hacer que los documentos sean buscables. En la búsqueda de texto completo, los desarrolladores suelen especificar diferentes asignaciones de índices para los distintos tipos de documentos. Por ejemplo, es posible que desee indexar el campo "ciudad", pero sólo para documentos de tipo "hotel" y no para documentos de tipo "monumento". En versiones anteriores, esto sólo funcionaba si el tipo se establecía mediante un atributo en el JSON del documento; en 4.6 también puede utilizar una parte de la clave del documento para determinar el tipo de documento, por ejemplo, el prefijo hasta el "::" para claves como "hotel::1234".
Con esta mejora, es más fácil admitir el estilo común de modelado de datos en el que el tipo de documento se indica mediante una parte de la clave, por ejemplo, "user::will.gardella". En general, este identificador de tipo será un prefijo de la clave, por lo que FTS ofrece una opción sencilla para especificar el prefijo sin tener que recurrir a expresiones regulares. Por otro lado, puede utilizar expresiones regulares si tiene un diseño de clave más complejo, como una infija.
Puedes probarlo en el bucket travel-sample que viene con Couchbase Server. El modelo de datos travel-sample sigue el principio del cinturón y los tirantes: el tipo de documento se indica de forma redundante tanto en un atributo de tipo JSON COMO en el prefijo de la clave del documento.
Aquí tienes un ejemplo paso a paso, suponiendo que tienes instalado travel-sample bucket. Vamos a crear un índice que permitirá a nuestros usuarios buscar hoteles y aerolíneas. Es un poco extraño, pero vamos a hacerlo.
En primer lugar, vaya a su administrador web (p. ej. http://localhost:8091/) > índices > índices de texto completo > nuevo índice de texto completo. Esta URL puede llevarte directamente allí, dependiendo de dónde tengas tu servidor: http://127.0.0.1:8091/ui/index.html#/fts_new/?indexType=fulltext-index&sourceType=couchbase.

 

couchbase_enterprise_edition_1

Verá un nuevo "Identificador de tipo". El comportamiento antiguo es el predeterminado, es decir, buscar en el cuerpo del documento un campo llamado "tipo" que indique el tipo de documento. En este caso, vas a utilizar el id de los metadatos del documento en su lugar.

New_Full_Text_Index

 

Haga clic en la casilla junto a Doc ID hasta separador. Introduzca el guión bajo '_'. Esto indica a FTS que analice las claves del documento hasta el guión bajo y compare esos prefijos con cualquier cadena que introduzca en "Type mapping". Es importante tener en cuenta que este paso sólo le dice a FTS dónde buscar el tipo del documento, no declara ninguna regla de mapeo de índice todavía. Eso es lo que haremos a continuación.

new_full_text_index_doc_id

Haga clic en "Añadir asignación de tipos". Añade un tipo "aerolínea" y un tipo "hotel". No olvides desactivar el mapeo por defecto, de lo contrario vas a obtener todo en tu índice, no sólo aerolíneas y hoteles.

RegEx_type_mapping

Por último, como esto es sólo una prueba, despliegue "Avanzado" haciendo clic en el triángulo, y marque "Almacenar campos dinámicos". Esto no sólo indexará todos los campos de todos los documentos de aerolíneas y hoteles, sino que también almacenará lo que indexe en el índice de texto completo para que pueda ser resaltado y recuperado como fragmentos. Esto hace una demostración más agradable, pero engorda su índice y ralentiza todo en consecuencia. Para esta demostración no debería haber mucha diferencia.

new_full_text_index_travel_prefix
Cuando hayas terminado, la definición del índice tendrá este aspecto:

Observa que tu recién creada definición de índice JSON tiene un campo en el objeto "params" llamado "doc_config", que es nuevo en 4.6. Este campo, "doc_config", también es un objeto con dos campos "mode" y "type_field" o "mode", dependiendo de si está mapeando en base a Doc ID o type field .
Asignación de índices por campo de tipo:

Asignación de índices por Doc ID (prefijo hasta):

Puedes probar tu nuevo índice realizando una consulta de cadena de consulta para "delta", que resulta coincidir exactamente con una aerolínea y un hotel. (Lo sé, práctico, ¿verdad?). La consulta JSON tendrá este aspecto si utiliza la API REST, o puede utilizar el cuadro de búsqueda de la administración web para realizar la misma búsqueda.

Consejo extra: 

Puede obtener la consulta JSON desde el administrador web haciendo clic en la opción "Avanzado" situada a la derecha del campo de entrada de búsqueda y, a continuación, haciendo clic en la casilla de ejemplo de curl de línea de comandos.

travel_prefix

Clasificación

Couchbase Server 4.6 introduce la posibilidad de ordenar los resultados de búsqueda por cualquier campo del documento, siempre que ese campo también esté indexado. En versiones anteriores, y por defecto en 4.6, los resultados de búsqueda se ordenan por puntuación descendente, de forma que los resultados más relevantes aparecen primero.
Para utilizar un orden personalizado, debe pasar un campo "sort" con una matriz de cadenas en su consulta, donde cada cadena se refiere al nombre de un campo que desea ordenar. Utilizando el índice travelPrefix que hemos creado en el paso anterior, puede ordenar por nombre de la siguiente manera:

Puede anteponer a cualquier nombre de campo el carácter '-', que hace que ese campo se ordene en orden descendente. Así, el campo de ordenación del ejemplo anterior tendría este aspecto:

Si pasa una matriz de nombres de campo, los resultados se ordenarán primero por el primer campo. Los elementos con el mismo valor para ese campo se ordenarán por el siguiente campo, y así sucesivamente.
Puede utilizar dos campos especiales que funcionan para todos los documentos:

"_id - se refiere a la clave del documento
'_score' - se refiere a la puntuación de relevancia calculada por Bleve
He aquí otro ejemplo. En éste, los documentos se ordenan por puntuación, de forma descendente, e id si hay empate.

He aquí un ejemplo más complejo que podría utilizar para ordenar los resultados de la búsqueda de hoteles:

Los resultados se ordenarán primero por país. Si los documentos tienen el mismo valor para el país, se ordenarán por estado y, a continuación, si el país y el estado son iguales, las coincidencias se ordenarán por ciudad. Por último, si todos los demás campos son iguales, los resultados se ordenarán por puntuación de forma descendente. En este ejemplo, obtendrá una lista de resultados agrupados según la geografía y ordenados por puntuación a nivel de ciudad.

Agradecemos sus comentarios

Como siempre, nos gusta saber de ti. Muchas gracias por todas las aportaciones que habéis compartido; la generosidad de la comunidad y de los primeros usuarios tiene una gran influencia en la dirección del producto. ¡Feliz búsqueda!

Autor

Publicado por Will Gardella, Director de Gestión de Productos, Couchbase

Will Gardella es director de gestión de productos de analítica en Couchbase. Anteriormente, fue director de producto en el equipo de plataformas de big data de HP, director sénior de gestión de producto para SAP HANA y director sénior del programa global de Big Data de SAP Research centrado en big data y aprendizaje automático.

Dejar una respuesta