El motor de búsquedas de SharePoint 2010 proporciona una serie de WebParts con los que realizar búsquedas y aplicar filtros sobre los resultados. También podemos extender las funcionalidades del motor de búsquedas mediante las API de búsqueda de SharePoint con las que realizar consultas más específicas y complejas. Disponemos de dos formas de hacer consultas: KeywordQuery y FullTextSQLQuery.
KeywordQuery utiliza una sintaxis sencilla de consulta basada en términos pensada para consultas que no requieran de filtros basados en valores sino en términos.
Una consulta de este tipo quedaría:
SPServiceContext serverContext = SPServiceContext.GetContext(SPServiceApplicationProxyGroup.Default, SPSiteSubscriptionIdentifier.Default);
SearchServiceApplicationProxy searchProxy = serverContext.GetDefaultProxy(typeof(SearchServiceApplicationProxy)) as SearchServiceApplicationProxy; ResultTable rTable = null;
using (KeywordQuery kquery = new KeywordQuery(searchProxy)) { // Filtro KeywordQuery // ------------ string keywordFiltroTexto = string.Empty; if (!string.IsNullOrEmpty(Filtro.Texto)) { keywordFiltroTexto = string.Format(" Title:"{0}" ", Filtro.Texto); } kquery.QueryText = string.Format("IsDocument:1 {0} SCOPE:"Eventos"", keywordFiltroTexto); kquery.IgnoreAllNoiseQuery = true; kquery.TrimDuplicates = false; kquery.RowLimit = maximoNumeroDeResultados - resultados.TablaResultados.Rows.Count; kquery.ResultTypes = ResultType.RelevantResults; kquery.KeywordInclusion = KeywordInclusion.AnyKeyword; ResultTableCollection resultsll = kquery.Execute(); rTable = resultsll[ResultType.RelevantResults]; TablaResultados.Load(rTable, LoadOption.PreserveChanges); TablaResultadosRecomendados.Load(rTable, LoadOption.PreserveChanges); resultados.QuisoDecir = resultsll.SpellingSuggestion; }
Con FullTextSQLQuery podremos realizar consultas con una sintaxis similar a la de SQL con la que construir consultas complejas y muy específicas. Una consulta con esta sintaxis quedaría de la siguiente forma:
// Ejecuta la búsqueda con FullTextSqlQuery // ------------------------------------------- using (FullTextSqlQuery buscador = new FullTextSqlQuery(searchProxy)) { buscador.AuthenticationType = QueryAuthenticationType.NtAuthenticatedQuery; buscador.QueryText = string.Format("SELECT Title, Rank, Size, Descripcion, Write, Path, Keywords, Estado, FechaFinal, FechaInicial FROM scope() WHERE ( ("SCOPE" = 'Eventos') AND ( FREETEXT(DefaultProperties,'{0}') ORDER BY Rank DESC", fullFiltroTexto); buscador.ResultTypes = ResultType.RelevantResults; buscador.RowLimit = maximoNumeroDeResultados; buscador.IgnoreAllNoiseQuery = true; buscador.TrimDuplicates = false; buscador.KeywordInclusion = KeywordInclusion.AnyKeyword; ResultTableCollection results = buscador.Execute(); rTable = results[ResultType.RelevantResults]; TablaResultados.Load(rTable, LoadOption.OverwriteChanges); TablaResultadosRecomendados.Load(rTable, LoadOption.OverwriteChanges); }
El problema lo encontramos a la hora de construir estas consultas durante el desarrollo, ya que no siempre resultan sencillas y en ocasiones necesitamos conocer que resultados devuelve. Para ello disponemos de la herramienta gratuita Search Explorer con la que podremos consultar los ámbitos disponibles, las propiedades mapeadas y los más importante construir y probar nuestras consultas sobre el motor de búsqueda en el momento sin necesidad de volver a compilar.
Desde un servidor con SharePoint 2010 instalado abriremos la aplicación y pulsaremos en “Get Search Apps” para cargar las aplicaciones de servicio de búsqueda disponibles. A continuación realizaremos doble click sobre la aplicación de búsqueda y se cargarán las propiedades del servicio, los ámbitos y las propiedades manejadas disponibles (Managed Properties).
Desde la pestaña “Queries” podremos construir la consulta seleccionando los ámbitos para los que queremos ejecutarla y marcando “Include” en aquellas propiedades manejadas que queramos incluir en la consulta. También podremos realizar un filtro por alguna de la propiedades introduciendo un valor en la casilla “Criteria”.
Una vez seleccionados los elementos sobre los que consultar pulsaremos en “Make SQL” para construir automáticamente la consulta en formato FullTextSQLQuery. Desde “QuerySQL” podremos modificar la consulta o ejecutarla desde el botón “Run Query”. Al hacerlo se abrirá una ventana con los resultados encontrados para la consulta indicada. Es importante que tengáis presente que la consulta se ejecutará con las credenciales del usuario logado en ese momento, de forma que los elementos para los que no tengamos permisos no nos aparecerán.