martes, 27 de noviembre de 2012

SharePoint 2010 KeywordQuery searchs in SPLists & Document Libraries

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");
    }
}

No hay comentarios:

Publicar un comentario