private ResultTableCollection RearlizarLaBusqueda(Busqueda busqueda) { ResultTableCollection resultado = new ResultTableCollection(); using (SPSite sitio = new SPSite(_url)) { KeywordQuery consulta = new KeywordQuery(sitio); consulta = ConfigurarConsulta(consulta, busqueda); if (_validador.EsValidaLaConsulta(consulta)) { resultado = consulta.Execute(); } } return resultado; } private KeywordQuery ConfigurarConsulta(KeywordQuery consulta, Busqueda busqueda) { var nombresDeListas = ConseguirListasPorModulo(busqueda.Ambito); var resultado = consulta; string hiddenConstraints = ConfigurarElHiddenConstraints(_url, nombresDeListas); resultado.IgnoreAllNoiseQuery = true; resultado.KeywordInclusion = KeywordInclusion.AllKeywords; resultado.EnableStemming = true; resultado.TrimDuplicates = false; resultado.ResultTypes = ResultType.RelevantResults; resultado.HiddenConstraints = hiddenConstraints; resultado.QueryText = busqueda.Texto; return resultado; } private ListConseguirListasPorModulo(string nombreDelModulo) { var resultado = new List (); if (string.IsNullOrEmpty(nombreDelModulo)) { resultado = ConseguirTodosLosNombresDeLasListasDeTodosLosModulosPermitidos(); } else { resultado = _gestorConfiguracionBusqueda.ConseguirLosNombresDeLasListasPorNombreDeModulo(nombreDelModulo); } return resultado; } private string ConfigurarElHiddenConstraints(string url, List nombresDeListas) { StringBuilder ambitos = new StringBuilder(string.Empty); string direccionDeLista = string.Empty; var urlLista = string.Empty; for (int contador = 0; contador < nombresDeListas.Count; contador++) { urlLista = ConstruirUrlLista(url, nombresDeListas[contador]); direccionDeLista = string.Format("site:\"{0}\"", urlLista); ambitos.Append(direccionDeLista); if (contador + 1 < nombresDeListas.Count) { ambitos.Append(" OR "); } } return ambitos.ToString(); } private string ConstruirUrlLista(string url, string nombreLista) { using(SPSite site = new SPSite(url)) using (SPWeb web = site.OpenWeb()) { var lista = web.Lists.TryGetList(nombreLista); if (lista != null) { return lista.ParentWeb.Url + "/" + lista.RootFolder.Url + "/"; } throw new Exception("Nombre de lista no encontrada"); } }
martes, 27 de noviembre de 2012
SharePoint 2010 KeywordQuery searchs in SPLists & Document Libraries
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario