Social Icons

jueves, 16 de octubre de 2008

Busquedas en Sharepoint con SQL (II)

Hoy mismo lo voy a continuar, qué ilusión que te lean desde Bulgaria, dentro de nada tendré un ego tan grande como el de Jay de TC, bueno, a lo que vamos...
Como iba diciendo ayer en el post
Busquedas en Sharepoint con SQL (I) es muy fácil hacer consultas al motor de búsquedas de MOSS, lo malo es saber qué preguntarle.
Es interesante a la hora de hacer un buscador custom poder buscar por los campos que en cada caso nos interesen, y no con el freetext.
Out of the box se pueden hacer consultas del tipo:
"SELECT Title FROM SCOPE() WHERE CONTAINS(Title,'Chan')"
De esta forma nos devolverá una tabla con todos los elementos de lista o biblioteca cuyo Title sea 'Chan'. Y quien dice title dice una de las ciento y pico managed properties (Asignaciones de propiedades de metadatos) que hay por defecto en MOSS, solo con esto ya podemos ofrecer alguna potencia, por ejemplo:
"SELECT Title FROM SCOPE() WHERE CONTAINS(Title,'Chan') AND Size > 162 ORDER BY Created"
Pero aún así no es suficiente, por eso mismo SharePoint nos permite crear nuestras propias managed properties para poder buscar en cualquiera de las columnas que hayamos creado en nuestro portal.


luego


Desde allí hacemos click en Nueva propiedad administrada y configuramos nuestra columna para buscar:

Por último, para rellenar de datos nuestra propiedad administrada necesitaremos hacer un rastreo completo (Full Crawl).
He creado una columna llamada factura y le he asignado la propiedad rastrada (crawled property) Factura(Texto).
Las crawled properties salen después de crear una columna en una lista cualquiera del portal y hacer un rastreo completo, o sea, que puedes buscar por el parámetro que te de la gana.

Después de tener todos los campos que necesitamos ya sí que podemos hacer búsquedas potentes, por ejemplo:
"SELECT Title, Factura, FechaFactura FROM SCOPE() WHERE CONTAINS(Factura,'VRG535') ORDER BY FechaFactura"
O por ejemplo si necesitamos más de una palabra en el CONTAINS:
"SELECT NombreReunion, Asistentes FROM SCOPE() WHERE CONTAINS(Asistentes,'Chan AND Jay') ORDER BY FechaReunion"
O bien:
"SELECT NombreReunion, Asistentes FROM SCOPE() WHERE CONTAINS(Asistentes,'Chan AND Jay') AND CONTAINS(Supervisor,'Eva') ORDER BY FechaReunion"
Si quieres buscar en un scope (ámbito) específico puedes hacer:
"SELECT NombreReunion, Asistentes FROM SCOPE() WHERE "SCOPE"='MiScope' AND CONTAINS(Asistentes,'Chan') AND NOT CONTAINS(Supervisor,'Eva OR Jay') ORDER BY FechaReunion"
Y solo con ésto ya me siento capaz de bastantes cosas...
¡¡YOOOOOO TENGO EL PODER!!

También funciona el Like e incluso algunos wildcards o comodines, algún día de éstos si llego a enterarme de cómo funcionan lo postearé, mientras tanto prueba a discreción y disfruta por fin de unas búsquedas relativamente potentes.

No hay comentarios: