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:
De esta forma, cuando ejecutemos la consulta, podremos consultar el resultado y ver lo que nos devuelve:
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:
Y después de añadir el filtro, el resultado es el siguiente:
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:
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:
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:
Y ahora si lo deseamos, podremos crear un filtro contra esta nueva propiedad:
Y el resultado:
Este enlace puede resultar útil para ver la potencia del Keyword Query Language (KQL):
0 comentarios:
Publicar un comentario