Streaming de libros Parte 2 – Indexación con Full Text Search

Full Text Search nos da la capacidad de indexar campos basados en caracteres (aunque su almacenamiento sea en binario) y hacer búsquedas complejas sobre esos textos.

Esta capacidad viene dada por los siguientes elementos:

  • SQL Full-text Filter Daemon Launcher: Se encarga de mantener actualizados los índices Full Text Search de cada tabla, asociado a cada instancia de Sql Server, pero corriendo en un proceso separado. Si no lo necesitamos, podremos poner su estado a Stop.
  • Full-text index : Índice full-text que indexa el contenido de la tabla. Solo puede haber uno por tabla y lenguaje. Por lo que, si nuestra aplicación maneja documentos en distintos idiomas, será necesario separarlos en tablas distintas.
  • iFilters: El motor de indexado debe de reconocer el tipo de fichero que contiene el campo varbinary(max), de ahí que la extensión de ese fichero se almacene en la columnda DocumentType. Para ver los tipos de ficheros que el motor es capaz de indexar, ejecutaremos la siguiente sentencia:
    •  
      •  
        •  
          •  

Si alguna extensión no aparece, es necesario instalar su iFilter específico. Por ejemplo, es el caso de los ficheros PDF de Adobe. En máquinas de 32 bit, el iFilter para ficheros PDF se instala con el propio Adobe Acrobat Reader, pero para máquinas de 64 bit es necesario instalar el componente Adobe PDF iFilter 9 for 64-bit platforms y seguir las instrucciones.

  • Consultas específicas para consultar campos indexados con Full-text Search, como CONTAINS o FREETEXT.

Comenzaremos con la creación del índice Full-Text search en nuestra tabla Book. Para ello, utilizaremos el Sql Management Studio.

  • Haciendo click con el botón derecho sobre nuestra tabla, desplegaremos el siguiente menú:

image

  • Seleccionar el índice único sobre la columna que anteriormente hemos creado:

image

  • Seleccionar la columna que contiene los datos varbinary a indexar, la columna que contiene el DocumentType y el lenguaje en que los libros están escritos:

image

  • Seleccionar el modo en que los cambios sobre el campo Data van a ser registrados.Salvo escenarios excepcionales, el modo más común y recomendando es Automatically:

image

  •  
    •  
      • Automático: Los cambios sobre el campo Data se registrarán en una tabla y el índice será actualizado automáticamente.
      • Manual: Los cambios sobre el campo Data se registrarán en una tabla, pero la actualización del índice conforme a esas modificaciones tendrá que ser explícito (llamado a mano).
      • No registrar cambios: Los cambios sobre el campo Data no se registrarán, por lo que el índice tendrá que ser rehecho para mantenerlo actualizado.
  • Seleccionar el catalog en el que se creará el índice ful-text y más opciones de búsqueda:

image

  •  
    • Es necesario seleccionar un catalog de tipo full-text para crear el índice. También en esa sección podemos establecer si se consideran las tildes para las búsquedas.
    • En la opción “Select full-text stoplist” se elige la lista de palabras stop (palabras que son, por ejemplo, nexos entre otras palabras, etc). Si se selecciona “system” se utilizarán las palabras stop del lenguaje del sistema. Otros valores son “off”, para que también sean indexadas, o la selección de una lista personalizada de este tipo de palabras especiales, ya sea porque queremos elegir una lista en un lenguaje distinto al del sistema o una específica. Con esta opción se pretende no crear confusión en la búsquedas y aliviar la carga del índice al no tener que indexar este tipo de palabras, que suelen ser numerosas.
  • En esta pantalla se seleccióna la planificación de la populación de la tabla y del full-text catalog.
  • Finalizando este wizard, se comenzará a popular el índice, ya que el tipo de registro de cambios se ha establecido en automático.

Ahora ya está indexado el campo Data con un índice full-text que, según está configurado, se actualizará automáticamente ante modificaciones en la tabla.

Podemos ver cómo queda el menú Full-text index de nuestra tabla:

image

 

 

 

 

 

La única opción que cabe comentar es Start Incremental Population, que realiza la populación del índice de manere incremental, con la restricción de que la tabla tiene que tener un campo timestamp para controlar ese proceso incremental.

Para posteriores post, utilizaremos las consultas CONTAINS y FREETEXT para consultar el campo indexado.

Publicado por

Vicente García Diez

Mi nombre es Vicente García Diez y soy arquitecto empresarial, experto en tecnologías Microsoft y transformaciones digitales complejas. Soy socio director y Trusted Advisor en abstratio En mi blog trataré temas de Estrategia IT y lecciones aprendidas en mis proyectos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *