Búsqueda de texto completo (o FTS) es una nueva característica que está siendo lanzada como vista previa para desarrolladores en Couchbase 4.5. No está pensada para producción, y aún no está soportada, pero es un vistazo a lo que está por venir.

Al ofrecer la posibilidad de buscar, un simple LIKE '%foo%' con N1QL no es suficiente. Sus usuarios esperan una experiencia de búsqueda más rica: que tenga en cuenta el idioma y ordene los resultados por su relevancia.

En esta entrada del blog, te lo voy a mostrar:

  • Cómo crear un índice de búsqueda de texto completo
  • Cómo ejecutar una consulta de búsqueda de texto completo en la aplicación Consola Couchbase
  • Cómo ejecutar una consulta de búsqueda de texto completo con resaltado en ASP.NET

Crear un índice de búsqueda de texto completo

En primer lugar, debe asegurarse de que está utilizando Couchbase 4.5 (beta, al menos)Asegúrate de que tienes acceso a la consola de Couchbase y de que tu clúster está ejecutando un servicio Full Text. Puedes comprobar si tienes un servicio Full Text en ejecución haciendo clic en "Nodos de Servidor" en la Consola de Couchbase. Los servicios (como Full Text) tienen que ser activados/desactivados cuando se añade un nodo al cluster. Si necesitas un repaso, echa un vistazo a mi entrada de blog sobre cómo instalar y configurar Couchbase en Windows.

Server Nodes - Services available

Voy a configurar un índice de búsqueda de texto completo en el viaje-muestra cubo de datos de muestra. Puede instalarlo yendo a Ajustes -> Cubos de muestra, seleccionando 'travel-sample' y haciendo clic en "Crear".

Create a sample bucket

En estos datos de ejemplo, hay documentos de tipo "landmark". Entre otras cosas, estos documentos contienen campos de "contenido". He aquí un fragmento de uno de los documentos landmark. (ID 'landmark_16079' si nos está siguiendo):

Con esa estructura en mente, vamos a crear el índice. Ve a Índices->Texto completo, y haz clic en "Nuevo índice de texto completo".

Voy a nombrar el índice viaje-muestra-idxy ponerlo en el viaje-muestra cubo. Hay un montón de opciones aquí, pero sólo voy a cubrir las asignaciones de tipo. Expanda "Type Mappings", y haga clic en "Add Type Mapping". Esto le permite restringir la búsqueda de texto completo a documentos de un determinado tipo (en este caso, "landmark", que coincide con el campo "type"). Marque también la casilla "indexar sólo los campos especificados"; de lo contrario, se indexarán todos los campos de los documentos para la búsqueda. Pulsa "Aceptar".

Create full text search for landmark documents

A continuación, pase el ratón por encima de la asignación de tipo "punto de referencia" y haga clic en el icono + y haga clic en "insertar campo secundario". Si quieres indexar datos de búsqueda que están más abajo en la jerarquía de tu documento, entonces necesitarías 'insertar campo hijo' (tantos niveles como haga falta) hasta llegar a él. En nuestro caso, el campo de contenido está en el nivel raíz, así que no necesito hacer eso.

Para el campo hijo, introduzca el nombre del campo ("contenido") en el campo, deje todo lo demás como está, y marque la casilla "almacenar" (más sobre esto más adelante), y pulse "ok".

Create child field for full text search

Por último, edite la asignación de tipos "por defecto" y desmarque la opción "activado". Esta asignación permitiría la búsqueda en todos los documentos, pero en este ejemplo queremos limitarla sólo a landmark. Pulsa "Aceptar" y "Crear índice".

Disable default type mapping on full text search

Después de pulsar "Crear índice", se te mostrará una vista general del índice que acabas de crear. Comenzará inmediatamente a indexar documentos. Si pulsa el botón Actualizar se le mostrará el recuento de los documentos indexados hasta el momento.

Full Text Search indexing in progress

Será 100% cuando esté completo.

Full Text Search indexing complete

Ejecutar una consulta de búsqueda de texto completo en la consola de Couchbase

Antes de entrar en C#/.NET, puedes probar la búsqueda de texto completo directamente desde la consola. Vaya a Índices->Texto completo, y seleccione el índice de texto completo que acaba de crear. Introduce un término de búsqueda (si estás utilizando la muestra de viajes, "posada", "rascacielos" o "bed and breakfast" son buenos términos para probar.

Using the full text search

Cuando haga clic en buscar, obtendrá una página de resultados de búsqueda (ID del documento y un fragmento de contenido) ordenados según su puntuación de relevancia. Observe que los términos de búsqueda aparecen resaltados en el fragmento de contenido. Habilitar "almacenar" en el campo hijo hace que esto funcione. Si no lo hace, seguirá obteniendo los resultados de los documentos en el orden correspondiente, pero no obtendrá el fragmento de contenido resaltado.

Full Text Search results in Couchbase Console

Tenga en cuenta que la búsqueda de texto completo utiliza Blevey permite realizar búsquedas más complejas (frases exactas, consultas booleanas, etc.). Pruebe a buscar "cama y desayuno" o cama-desayunopor ejemplo, a ver qué pasa.

Consulta de búsqueda de texto completo con resaltado en ASP.NET

Una vez que estés satisfecho con el índice de búsqueda de texto completo que has creado, es hora de sacarlo de la consola de Couchbase y llevarlo a una aplicación real. He creado un ejemplo en ASP.NET que demuestra cómo usar el SDK .NET de Couchbase para realizar una búsqueda de texto completo. Para este ejemplo, asumo que te sientes cómodo con ASP.NET MVC y con los fundamentos de la integración de ASP.NET con Couchbase. Si ese no es el caso, te recomiendo que revises la sección Ejemplo de "Hola Mundo" de ASP.NET sobre el que escribí anteriormente en el blog.

He creado dos acciones: Índice y Búsqueda. La acción Index muestra una vista que permite al usuario escribir una cadena de búsqueda. Aquí está el controlador y la acción:

Y aquí está la vista en Index.cshtml:

No es bonito, pero es funcional. A continuación, he creado una acción de búsqueda. Esta acción tomará la consulta de búsqueda y mostrará los resultados de Couchbase. Los resultados serán muy similares a los que vimos en la consola de Couchbase: ID del documento, puntuación de relevancia y fragmentos resaltados.

Hay tres pasos para ejecutar una búsqueda de texto completo:

  1. Instanciar algún objeto que implemente ISearchQuery. Hay muchas opciones; yo utilizo MatchQuery para este ejemplo.
  2. Instanciar un objeto SearchParams para especificar las opciones de búsqueda.
  3. Utilice un IBucket para ejecutar la consulta+parámetros y obtener resultados.

En este ejemplo, he realizado los tres pasos directamente en la acción Buscar:

Algunas notas sobre los SearchParams:

  • Lo limito a los 10 primeros. También hay un método Skip() que puedes usar para paginar.
  • Estoy estableciendo un tiempo de espera de 10000ms. Si creo el índice correctamente, los resultados serán devueltos muy rápidamente, pero si jugueteo con el índice y algo va mal, quiero que la búsqueda falle rápidamente.
  • Estoy configurando el estilo de resaltado como HTML. Esto pondrá el alrededor de los términos de búsqueda resaltados en los resultados de los fragmentos.

También he creado un SearchResultsModel modelo de vista. Esto hace el mapeo que necesito para obtener el ID del documento, puntuación, fragmentos de los resultados de búsqueda (así como las palabras clave que el usuario escribió).

Por último, aquí está la vista Search.cshtml:

No es una página HTML muy bonita, pero es funcional. Esto es lo que parece en acción:

Full Text Search results in ASP.NET

Conclusión

Recuerda que esta característica es sólo una vista previa para desarrolladores: aún no está soportada y aún no se recomienda para producción. Pero la búsqueda de texto completo está llegando a Couchbase. De hecho, puedes opinar sobre cómo se implementará esta función. Echa un vistazo a la Búsqueda de texto completo RFC en GitHuby no dude en hacer preguntas o dejar comentarios.

¿Aún tiene preguntas? ¿Necesitas ayuda? Déjanos un comentario, ping me on Twittero envíeme un correo electrónico (matthew.groves AT couchbase DOT com).

Autor

Publicado por Matthew Groves

A Matthew D. Groves le encanta programar. No importa si se trata de C#, jQuery o PHP: enviará pull requests para cualquier cosa. Lleva codificando profesionalmente desde que escribió una aplicación de punto de venta en QuickBASIC para la pizzería de sus padres, allá por los años noventa. Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores. Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft.

Dejar una respuesta