Full-Text Search en SQLite. Qué es y cómo funciona - Versión para impresión +- Comunidad Gambas-es (https://gambas-es.org) +-- Foro: Gambas (https://gambas-es.org/forum-3.html) +--- Foro: Bases de Datos (https://gambas-es.org/forum-6.html) +--- Tema: Full-Text Search en SQLite. Qué es y cómo funciona (/thread-864.html) Páginas:
1
2
|
Full-Text Search en SQLite. Qué es y cómo funciona - Harpo - 03-04-2022 Saludos! Les traigo una pequeña demo de cómo usar una característica de SQLite: Full-Text Search (FTS5). Iba a contestar al mensaje de Gambafeliz sobre filtrar acentos y pensé que quizá ya estuviera este tema expuesto en el foro antiguo, no encontré nada al respecto. Seguramente los veteranos ya conozcan esta característica, para los neófitos será algo nuevo. Y cómo lo mejor es un ejemplo práctico aquí tienen una demo básica para empezar con el tema. ¿Qué es FTS5? En un módulo interno de SQLite que permite realizar búsquedas "Full-Text" mediante la creación de tablas virtuales. Este tipo de búsquedas ignora acentos, mayúsculas ... se lo traga casi todo. Aquí tienen un par de enlaces: SQLite FTS5 Full-Text Search Wikipedia Para los que no quieran descargar la demo: Para usar FTS5 hay que crear una tabla virtual: [code] La tabla contendrá los campos de texto sobre los que queremos buscar. Después la cargamos desde una fuente de datos estándar, en este caso una vista que recoge datos de otras tablas: [code] Por último, podemos lanzar las consultas en formato FTS5 que tienen su particularidad: [code] La demo. Antes de nada, el programa es un "hijo putativo" de una aplicación propia que utilizo para trastear con bases de datos, le he quitado lo irrelevante para el caso y limpiado, pero no tiene control de errores ni comentarios.... no debería darles ningún problema. En la imagen: A la izquierda hay un GridView con información de la conexión y recoge el tamaño de la base de datos SQLite, tema relevante porque verán que esta engorda cual luchador de sumo, aunque no es un problema. Debajo un Log de lo que se va ejecutando con el tiempo empleado y el SQL ejecutado. A la derecha empezando por arriba:
Los pasos a dar:
El resultado: Espero que les sirva para sus proyectos, para mi es muy útil. Un saludo. RE: Full-Text Search en SQLite. Qué es y cómo funciona - Shordi - 03-04-2022 ¡Buen aporte! RE: Full-Text Search en SQLite. Qué es y cómo funciona - gambafeliz - 03-04-2022 Muchas gracias Harpo por tu gran esfuerzo. Y por ayudarme en la distancia, claro Lo miraré como un buen alumno y no descartes que te pregunte como un niño en sus comienzos en el cole. Saludos, joven. RE: Full-Text Search en SQLite. Qué es y cómo funciona - Harpo - 04-04-2022 (03-04-2022, 13:04)gambafeliz escribió: Muchas gracias Harpo por tu gran esfuerzo. Y por ayudarme en la distancia, claro De nada caballero. Unas cosillas a tener en cuenta:
Full Text query syntax Pragma integrity check Vacuum Un saludo. RE: Full-Text Search en SQLite. Qué es y cómo funciona - gambafeliz - 04-04-2022 He estado pensando sobre FTS5 y tras como me lo cuentas, he pensado que es poco practico. ¿estoy equivocado?, ¿ves realmente un ejemplo donde es practico? Te lo digo por que mantener las tablas y mantener una tabla virtual para obtener datos ambiguos como "Clinica" y Clínica" no se si compensa este método. Diría que se puede contar con los dedos de la mano quien lo usa en real a nivel incluso mundial. No se yo. ¿En fin que opinas al respecto? Otra cosa me ha gustado tu código, gracias, ya que viendo código real de unos y de otros, me enriqueces muchísimo técnicamente. Incluso he visto algo en tu código que pensaba que Gambas ni lo hacia, tengo que probarlo, pero si funciona, sigo diciendo que Gambas es maravilloso. Gracias. RE: Full-Text Search en SQLite. Qué es y cómo funciona - Harpo - 05-04-2022 (04-04-2022, 21:11)gambafeliz escribió: He estado pensando sobre FTS5 y tras como me lo cuentas, he pensado que es poco practico. ¿estoy equivocado?, ¿ves realmente un ejemplo donde es practico? Buenos días! Si que se ha desanimado pronto, hombre de poca fe!. En mi mensaje le decía "cosillas" a tener en cuenta. Le matizo lo que dije: Siempre hay que tener en cuenta la naturaleza de los datos que manejamos, de ahí que puede ser necesario recargar las tablas FTS5 con más o menos frecuencia, pero será raro que estas tengan un gran volumen de datos. En el caso más extremo, utilice una base de datos SQLite en memoria, al abrir el formulario de búsqueda cree la tabla FTS5 en ella y hace la carga, al cerrar la conexión se borra la base de datos en memoria. Yo al abrir las bases de datos SQLite añado la siguiente linea: Código: With modDB.hConn Ya tiene usted una nueva base de datos lista para funcionar, en la misma conexión. La que reside en fichero es "main", la que reside en memoria "mem", si una tabla existe en ambos esquemas, y no especifica cual quiere usar, Gambas siempre leerá de "main". De hecho ni siquiera aparece en Connection.Databases, y tampoco Connection tiene un método para hacer el "attach". Para crear la tabla FTS5 en memoria: [code] Crear una tabla y cargarle 5.000 registros tarda milisegundos. Si cierra la conexión desaparece. Ya no tiene problemas. Para que vea un caso práctico le subo una variante de la demo, usa una base de datos en memoria solamente, y algún otro cambio. Si se fija arriba a la derecha verá que la base de datos es ":memory:", el programa no usa base de datos en disco. Y en el log puede ver varias cosas:
Para terminar, creo que este tipo de búsquedas cubre una necesidad específica y lo hace bien, a mí me es muy útil. Sobre si tiene uso y quién lo usa haga una cosa, coja su teléfono móvil, abra Whatsapp y pulse en la lupa de arriba, es la búsqueda. Teclee algo común en las conversaciones, como "hola" o "buenos días" y observe el resultado. Teniendo en cuenta que Whatsapp usa Sqlite yo juraría que si no es FTS5 lo han clonado. Teniendo en cuenta el número de usuarios de esa aplicación, va a resultar que FTS5 de Sqlite es la herramienta Full-Text Search para bases de datos más utilizada del mundo. Ya me contará que hago en mi código que usted pensaba que no se podía hacer, me ha dejado intrigado. Un saludo. RE: Full-Text Search en SQLite. Qué es y cómo funciona - gambafeliz - 05-04-2022 Pues chico, te lo voy a resumir, "me has dejado con las patas colgando" Que máquina ere, macho.... RE: Full-Text Search en SQLite. Qué es y cómo funciona - Harpo - 05-04-2022 Tampoco es para tanto RE: Full-Text Search en SQLite. Qué es y cómo funciona - gambafeliz - 06-04-2022 Macho, es que soy muy exagerado, ya sabes es broma. Bueno gracias, saludos. RE: Full-Text Search en SQLite. Qué es y cómo funciona - Harpo - 06-04-2022 Sigue sin ser para tanto, como dijo alguien una vez: Todos somos ignorantes, pero no todos ignoramos lo mismo. Un saludo. |