03-04-2022, 08:46
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:
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:
Por último, podemos lanzar las consultas en formato FTS5 que tienen su particularidad:
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.
![[Imagen: w1S9gCP.png]](https://i.imgur.com/w1S9gCP.png)
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:
![[Imagen: N50ZYcB.png]](https://i.imgur.com/N50ZYcB.png)
Espero que les sirva para sus proyectos, para mi es muy útil.
Un saludo.
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:
SQL
- CREATE VIRTUAL TABLE FTS5_Direcciones USING FTS5(Autonomia,Provincia,Poblacion, CodPostal, Direccion)
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:
SQL
- INSERT INTO FTS5_Direcciones(Autonomia, Provincia, Poblacion, CodPostal, Direccion) SELECT Autonomia, Provincia, Poblacion, CodPostal, Direccion FROM Direcciones
Por último, podemos lanzar las consultas en formato FTS5 que tienen su particularidad:
SQL
- SELECT * FROM FTS5_Direcciones WHERE FTS5_Direcciones MATCH 'sierra OR (fuente NOT madrid)' ORDER BY RANK
La demo.
Antes de nada, el programa es un "hijo putativo"

![[Imagen: w1S9gCP.png]](https://i.imgur.com/w1S9gCP.png)
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:
- La primera linea contiene botones para ejecutar la demo (pasos 1 a 4), otro para borrar la tabla virtual FTS5, otro que muestra las tablas en la base de datos y el que cierra la aplicación.
- La segunda es un Combobox que una vez completados los 4 pasos contiene sentencias SQL Full-Text de ejemplo para ver las posibilidades.
- La tercera es TextArea donde se cargan las sentencias SQL, se pueden modificar y volver a lanzar. Todas las sentencias que ejecuta la demo pasan por aquí. A su lado hay 3 botones: ejecutar el SQL, limpiar el TextArea, limpiar el GridView. Si pulsan Enter en TextArea ejecuta la sentencia. Si hacen doble click sobre una linea del Log se vuelve a cargar el SQL aquí.
- Por último un GridView con los resultados.
Los pasos a dar:
- Comprobar que nuestro SQLite tiene FTS5 habilitado, en la imagen se puede ver en la linea 8. En el LOG se ve la versión de SQLite que estamos utilizando.
- Crear y cargar los datos. Hubiera subido la base de datos que uso para pruebas, son datos de direcciones en España: Autonomía - Provincia - Población - Código Postal - Dirección. Pero hay una limitación de tamaño en lo que se puede subir al foro. Los datos van en un CSV con algo más de 100.000 registros, se puede limitar pero así se puede ver el rendimiento en las búsquedas. Ojo que este paso tarda sus buenos 15 minutos.
- Crear la tabla virtual para las búsquedas FTS5. Si pulsan el botón "Tables" verán lo que se crea en la base de datos.
- Cargar la tabla virtual con los datos del CSV. Estos dos últimos pasos son rápidos, no llegan a un 1 segundo a pesar de los 100.000 registros.
El resultado:
![[Imagen: N50ZYcB.png]](https://i.imgur.com/N50ZYcB.png)
Espero que les sirva para sus proyectos, para mi es muy útil.
Un saludo.