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 List ConseguirListasPorModulo(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