Motor de búsqueda de Sharepoint 2007 y aplicación en WPF.

Hoy quiero compartir con ustedes cómo podemos configurar el motor de búsqueda de sharepoint y cómo podemos consumir el mismo. En artículos anteriores que estuve compartiendo en mi blog, Siderys Elite Software, estuve mostrando el poder el motor de búsqueda y su utilización desde los portales de Sharepoint. En esta ocasión vamos a consumir y buscar información en el índice, pero utilizando una aplicación externa y una WebPart personalizada para desplegar los resultados. Para este artículo que se basa en un WebCast que estuve dictando, la aplicación será una aplicación de escritorio confeccionada en WPF que mediante los Servicios Web de Sharepoint podemos buscar información dentro del motor. En la imagen 1 podemos observar la aplicación WPF que vamos a construir para consumir el motor de búsqueda de Sharepoint, como podrán observar, no solo tenemos acceso a la información almacenada por el índice, sino que también podemos acceder a los ámbitos creados y utilizarlos para realizar búsquedas especificas.

[Imagen 1]
clip_image002

En la imagen 2, vemos la Webpart personalizada que hemos creado para desplegar los resultados. Esta Webpart utiliza un componente que resuelve las consultas contra el motor de búsqueda de Sharepoint utilizando el modelo de objetos.

[Imagen 2]
clip_image004

Lo primero que tenemos que hacer es configurar nuestro motor de búsquedas para poder utilizar las dos aplicaciones, así que nos vamos a la administración central de Sharepoint y después a los servicios compartidos, donde encontraremos una sección específica para la configuración de nuestras búsquedas, como podemos ver en la imagen 3.

[Imagen 3]
clip_image006

Una vez accedamos a la página principal de nuestro Proveedor de servicios compartidos, recordar que podemos tener más de uno, vamos a seleccionar el link llamado “Configuración de Búsquedas” bajo la sección “Búsqueda” para acceder a la configuración del motor de búsqueda, como podemos ver en la imagen 4.

[Imagen 4]
clip_image008

Esta es la sección principal de configuración del motor de búsqueda para todo nuestro Proveedor de Servicios Compartidos y donde todos los portales que estén bajo el mismo tendrán acceso al contenido que se rastree. Tenemos la posibilidad de crear orígenes de contenido, reglas de rastreo, crear ámbitos de búsqueda y muchas cosas más, que como comente pueden verlas en artículos anteriores expuesto en el blog mencionado. Para este ejemplo en particular vamos ver cómo podemos crear un origen de contenido, hacia una carpeta en el sistema de archivos del servidor y que el motor nos rastree todo el contenido del mismo. Esto es vital cuando nos encontramos en un escenario que la información que queremos indexar no está en un sitio web de internet o portal de Sharepoint, si no que los documentos son almacenados en un directorio (Repositorio) y todos los usuarios acceden a los mismos a través del sistema de archivos. Todos sabemos lo tedioso que es, cuando tenemos que buscar un documento en ese repositorio y la única forma que tenemos de hacerlo, es ir documento por documento, viendo el nombre y así poder abrir el que estamos buscando. Con el uso de Sharepoint y su motor de búsquedas, podemos construir una solución que nos permita buscar información en distintos repositorios físicos en servidores y que el usuario pueda a través de una simple aplicación o incluso un portal de Sharepoint, buscar lo que necesita y acceder de forma inmediata a o los documentos que está buscando. Para configurar un origen de contenido, debemos seleccionar el link llamado “Orígenes de contenido y programaciones de rastreo” y así acceder a la página principal de configuración como podemos ver en la imagen 5.

[Imagen 5]
clip_image010

Lo próximo es crear un nuevo origen de contenido en nuestro motor de búsqueda y configurarlo, para lo cual debemos seleccionar el link “Nuevo origen de contenido” que se encuentra en la parte superior de la pantalla y accederemos a la página donde vamos a crear un origen nuevo como podemos ver en la imagen 6.

[Imagen 6]
clip_image012

En esta página debemos ingresar un nombre para el origen de contenido, mi recomendación es usar un nombre nemotécnico que nos permita identificarlo rápidamente, mas cuando podemos tener decenas de origines configurados en nuestro proveedor de servicios compartidos y si necesitamos modificar la configuración deberíamos tener acceso rápido. Una vez cargado el nombre, vamos a seleccionar el tipo de origen que estamos creando, como comente anteriormente, la idea es rastrear contenido en un directorio específico dentro de un servidor, por lo tanto seleccionamos la opción “Recursos Compartidos de Archivos”. Bien ahora tenemos que ingresar la ruta al directorio que queremos rastrear con el motor de búsqueda, así que en la sección direcciones de inicio, debemos ingresar la misma. Vale la pena destacar que cuando usamos el tipo de contenido que seleccionamos, las rutas que debemos cargar son rutas de red, por lo tanto el formato debe ser de la siguiente forma file://///Server/Carpeta%20Compartida. Podemos ingresar todas las rutas que queremos que se rastreen, simplemente debemos colocar una por renglón y listo. En la próxima sección, vamos a configurar como se va a llevar el rastreo, es decir, si queremos que el mismo se realice solo dentro de la carpeta que hemos indicado en la sección anterior o que también se contemplen todas las subcarpetas que esta contenga. Acá va a depender el tipo de repositorio que tengan y si desean indexar todo o solo una parte del mismo. Por último vamos a configurar la frecuencia con la cual se llevara a cabo el rastreo y debemos indicar con qué frecuencia el motor deberá crear el índice de nuevo o realizara rastreo parciales. Acá también dependerán de lo que ustedes necesiten modelar y con la frecuencia que el repositorio de documentos cambia. Si es un repositorio que tiene una frecuencia de variación muy alta, entonces lo conveniente es que el motor realice indexaciones incrementales en periodos cortos, por ejemplo cada 5 minutos, una vez realizada toda la configuración, aceptamos los cambios para que se cree el nuevo origen de contenido como podemos ver en la imagen 7.

[Imagen 7]
clip_image014

Lo próximo y último que vamos hacer es, realizar un rastreo completo por primera vez de la nueva ubicación para que el motor nos pueda adicionar la información al indicie. Para realizar esto, la forma más sencilla es desplegar el menú contextual del nuevo origen de contenido creado y seleccionar la opción “Iniciar rastreo completo” como podemos ver en la imagen 8.

[Imagen 8]
clip_image016

Si queremos ver como se realizo el rastreo y si hubo algún error en el mismo, en la página principal de la configuración de las búsquedas podemos acceder al log y ver que se indexo y si hubo algún problema cuando se ejecuto el mismo.
Una vez configurado nuestro motor de búsqueda y el contenido del repositorio indexado, podemos proceder a trabajar con las aplicaciones mencionadas. La solución de ejemplo que cree cuenta con 5 proyectos, como podemos ver en la imagen 9 y que paso a detallar a continuación.

[Imagen 9]
clip_image018

Siderys.Blog.Search.Engine -> En este proyecto consumimos el motor de búsqueda de Sharepoint usando el modelos de objetos. Las clases necesarias para poder realizar búsquedas personalizadas se encuentran dentro del espacio de nombre llamado “Microsoft.Office.Server.Search y Microsoft.Office.Server.Search.Query” y pertenecen al ensamblado “Microsoft.Office.Server.Search” .

Siderys.Blog.Search.Engine.Resultado-> Este proyecto contiene una clase que mapea los propiedades devueltas en el esquema de resultado. La misma es instanciada y cargada para devolverse a las aplicaciones que estarán mostrando los resultados.

Siderys.Blog.Search.Engine.WebService-> Este proyecto realiza búsquedas en el índice creado por Sharepoint utilizando los servicios que se pueden consumir a través de search.asmx, servicio web nativo de Sharepoint.

Siderys.Blog.Search.UI.WebPart-> Este proyecto es la Webpart que usamos para mostrar los resultados de forma personalizada una vez que el usuario realiza un búsqueda en el portal de Sharepoint. La instalación de la Webpart debe realizarse como cualquier Webpart.

Siderys.Blog.Search.UI.WPF-> Este proyecto es la aplicación en WPF, aplicación de escritorio creada para buscar información en el índice de Sharepoint, para lo cual consume los métodos expuestos en el componente “Siderys.Blog.Search.Engine” especialmente creado para realizar búsquedas y el resultado le es devuelto en una colección de objetos “ObjetoResultado” del componente “Siderys.Blog.Search.Engine.Resultado”

Para las consultas basadas en el servicio Web usamos el método Web llamado “QueryEx”, puesto que el resultado de la ejecución de dicho método es devuelto en un DataSet, pero también podríamos usar el método “Query”, que nos devuelve un string. Ambos métodos reciben como parámetro un esquema particular que debemos armar para y que podemos ver a continuación en la Sección 1.

[Sección 1]

<QueryPacket xmlns='urn:Microsoft.Search.Query'> <Query> <SupportedFormats> <Format>urn:Microsoft.Search.Response.Document.Document</Format> </SupportedFormats> <Context> <QueryText language='en-US' type='STRING'>SharePoint</QueryText> </Context> </Query> </QueryPacket>

Las consultas a través del modelo de objetos son usando el texto introducido por el usuario directamente y pasándoselo al motor para que realice la búsqueda dentro del índice. Para llevar a cabo esto, debemos usar la clase KeywordQuery, la que debemos instanciar y pasarle el nombre del proveedor de servicios compartidos donde queremos que se realice la búsqueda. Esta clase nos expone una propiedad llamada “QueryText” donde le debemos cargar el texto que deseamos buscar y el ámbito donde se llevara a cabo la búsqueda. Una vez que la propiedad está cargada debemos ejecutar el método llamado “Execute” y el cual nos devolverá un objeto del tipo “ResultTableCollection” donde estarán todos los resultados devueltos por el motor.En el código fuente adjunto al artículo encontraran todo el desarrollo descripto y solo deberán el nombre del proveedor de servicios compartido de la clase “ConsultaDOM” para que usen el que ustedes configuren. Quiero darles las gracias a Alvaro Affonso que me ayudo con la creación y animación de la aplicación WPF, puesto que él es el exporto en la materia, muchas gracias Alvaro.

Instalador clip_image001[6]
Código Fuente clip_image001[7]

Fabián Imaz

Compartir