Búsquedas a través del modelo cliente de SharePoint 2013: KeywordQuery II

En el post anterior se mostraba cómo crear una query sencilla de búsqueda a través del modelo cliente. También vimos las propiedades que devolvía una búsqueda por defecto. Vamos ahora a ver cómo devolver más propiedades y a utilizar los filtros más básicos.

Incluir más propiedades en los resultados:

Ya vimos en el post anterior qué propiedades por defecto devolvía nuestra tabla de resultados de búsqueda. Ahora bien, si queremos incluir una propiedad que no lo esté, y que además existe en el almacén de metadatos de búsqueda, podemos agregar más propiedades a la query, de la siguiente forma:

image

De esta forma, cuando ejecutemos la consulta, podremos consultar el resultado y ver lo que nos devuelve:

image

La utilidad que tiene incluir propiedades en los resultados, es que nos permite, aparte de mostrarlas, realizar consultas y filtros usando dichas propiedades.

Filtrar resultados de forma básica con KeywordQuery:

Ahora por ejemplo, de los resultados anteriores, vamos a filtrar aquellos en los que el ContentType es de tipo Item. Para ello:

image

Y después de añadir el filtro, el resultado es el siguiente:

image

De esta forma, podemos filtrar para mostrar elementos con un cierto ContentTypeId por ejemplo, o una extensión de fichero concreta, etc. o incluso una columna personalizada.

Incluir una columna personalizada como Managed Property:

Para incluir dentro de los resultados nuestra propia columna personalizada, deberemos realizar una serie de pasos.

En primer lugar, crear la columna; en este caso, una columna de tipo boolean:

image

Y una vez añadida a nuestra lista, deberemos lanzar un Full Crawl, para que podamos mapearla a una managed property. Por lo tanto, crearemos después una managed property, y mapearemos a dicha columna:

image

image

Una vez creada, deberemos lanzar otro Full Crawl para que los valores de nuestra columna se propaguen a la managed property. Una vez realizado, podremos lanzar la búsqueda con la consulta, incluyendo esta nueva propiedad, y la veremos en los resultados:

ClientResult<ResultTableCollection> results = null;

using (ClientContext ctx = new ClientContext("http://localhost:41414"))
{
KeywordQuery query = new KeywordQuery(ctx);
query.QueryText = "Item";
query.SelectProperties.Add("MySearchBoolProperty");
SearchExecutor executor = new SearchExecutor(ctx);
results = executor.ExecuteQuery(query);
ctx.ExecuteQuery();
}

if (results.Value.FirstOrDefault() != null)
{
Console.WriteLine("Results: " + results.Value.FirstOrDefault().ResultRows.Count());
Console.WriteLine("Properties per result: " + results.Value.FirstOrDefault()
.ResultRows.FirstOrDefault().Count());
Console.WriteLine("-------------------------------------------------------------");
foreach (var resultRow in results.Value.FirstOrDefault().ResultRows)
{
List<string> props = new List<string>() { "Title","MySearchBoolProperty",
"ContentType", "Rank", "ContentTypeId", "FileExtension", "IsDocument", "FileType" };
foreach (var property in resultRow.Where(i => props.Contains(i.Key)))
{
Console.WriteLine("\t -> {0}: {1}", property.Key, property.Value);
}
Console.WriteLine("-------------------------------------------------------------");
}
}

Y en los resultados veremos los valores introducidos:


image


Y ahora si lo deseamos, podremos crear un filtro contra esta nueva propiedad:


image


Y el resultado:


image


Este enlace puede resultar útil para ver la potencia del Keyword Query Language (KQL):


Keyword Query Language (KQL) syntax reference

SharePoint Between Racks © 2012
. Con la tecnología de Blogger.

¡Compártelo!


Estoy en LinkedIn!


Ve mi perfil en LinkedIn!