Artículo
· 21 jul, 2025 Lectura de 3 min

Acelera tus búsquedas de textos con índices %iFind

¡Saludos estimados miembros de la comunidad!

Muchos recordaréis las capacidades NLP disponibles en IRIS con el nombre de iKnow y que fueron deprecadas hará no mucho tiempo. Pero...¿Deprecado todo? ¡NO! Una pequeña aldea resiste a la deprecación, ¡los índices iFind!

Y os preguntaréis, ¿para qué valen estos magníficos índices? Pues muy sencillo, sirven para indexar los textos presentes en las columnas de tipo String y Stream y acelerar dramáticamente la velocidad de consulta sobre las mismas.

¿Qué son los índices %iFind?

Son un tipo de índices basados en mapas de bits, estos índices mapean cada valor único de una columna en una cadena de bits, indicando para cada fila si se dispone de determinado valor. Podéis ver más detalles de estos tipos de índices en la documentación oficial.

Disponemos de 2 tipos de índices en %iFind, el mínimo y el básico, que extiende del anterior.

%iFind.Index.Minimal

Admite búsquedas SQL de palabras y frases con comodines, búsquedas difusas y expresiones regulares. No admite búsquedas por coocurrencia ni por frases posicionales, ni el resaltado de resultados.

%iFind.Index.Basic

Admite todas las funciones del índice mínimo (búsqueda SQL de palabras y frases con comodines) y añade compatibilidad con coocurrencia, búsquedas de frases posicionales y resaltado de resultados. Las funciones de este índice son suficientes para la mayoría de las búsquedas de texto completo habituales.

¿Cómo definir un índice %iFind?

¡No podría ser más sencillo, os lo mostraré con un pequeño ejemplo de un desarrollo que he implementado para leer la información de licitaciones públicas de España:

Class Inquisidor.Object.Licitacion Extends (%Persistent, %XML.Adaptor) [ DdlAllowed ]
{

Property IdLicitacion As %String(MAXLEN = 200);
Property Titulo As %String(MAXLEN = 2000);
...

Index IndexIdLicitation On IdLicitacion [ PrimaryKey ];
Index IndexTitulo On (Titulo) As %iFind.Index.Basic(INDEXOPTION = 0, LANGUAGE = "es");

Como veis tenemos definida la propiedad Título sobre la que queremos hacer búsquedas que me permitan encontrar determinadas licitaciones, un ejemplo de los títulos que vamos a tener será el siguiente:

Servicio de mantenimiento y soporte de la aplicación informática CIVITAS para la gestión de la tarjeta sanitaria individual de la Gerencia Regional de Salud de Castilla y León.

Para definir el índice %iFind utilizaremos la configuración %iFind.Index.Basic(INDEXOPTION = 0, LANGUAGE = "es"), en este caso es un índice básico. Como podéis ver tenemos una serie de propiedades que nos permiten definir cómo queremos que trabaje nuestro índice, veamos las propiedades disponibles:

  • IGNOREPUNCTUATION: admite 2 valores, 0 y 1. Por defecto tendrá el valor 1 e ignorará los signos de puntuación en el texto.
  • INDEXOPTION: también con valores 0 y 1. Permite especificar si el índice permitirá lematización o descomposición de los textos. Debido al gran tamaño que puede requerir sólo se deberá habilitar en caso necesario (valor 1).
  • LANGUAGE: para definir el diccionario que se va a emplear en las búsquedas, en nuestro ejemplo, español.
  • LOWER: con valores 0 ó 1. Permitirá indicar si el índice será sensible a mayúsculas y minúsculas, por defecto tendrá el valor 0, ignorándolo.
  • USERDICTIONARY: para que el índice haga uso de un diccionario del usuario previamente a la indexación.

¿Cómo usar el índice %iFind en una consulta?

Para hacer uso de este tipo de índices deberemos usar la siguiente notación:

SELECT * FROM Inquisidor_Object.Licitacion WHERE %ID %FIND search_index(IndexTitulo, ?)

Veamos el índice en acción. En mi ejemplo tengo una tabla con 800.000 registros de licitaciones públicas. Veamos el plan con el tradicional LIKE sobre nuestra tabla:

Ahora veamos el plan usando el índice:

Como podéis ver el coste relativo entre la búsqueda normal y la búsqueda con el índice %iFind es astronómico: 1239110280 para la consulta sin índice por 8323422 para la consulta indexada, siendo 150 veces más rápida.

Si queréis ver en más detalle el tipo de búsquedas que permiten los índices %iFind aquí tenéis la documentación asociada.

¡Espero que os sea de utilidad!

Comentarios (0)1
Inicie sesión o regístrese para continuar