Indexando contenido en el Servicio Azure Search

Muy buenas a todos.

En anteriores post, comenzamos a trabajar con el servicio de Azure Search. Concretamente, vimos como crear índices en una instancia del servicio creada en Azure.

Primeros pasos con Azure Search: Los índices

A continuación, ¿Cuál es el siguiente paso?, una vez que hemos creado el índice, tenemos que indexar documentos en ese índice y eso es lo que vamos a hacer en esta entrada.

La indexación de contenidos, una vez que tenemos creado el índice es muy sencilla. En primer lugar, vamos a crear una aplicación de consola y vamos ejecutar desde la consola de Nuget el siguiente  comando para añadir las referencias a la SDK de Azure:

Install-Package Microsoft.Azure.Search -Pre

Esta aplicación va a tener el siguiente código de ejemplo


class Program
{
static void Main(string[] args)
{
int option;

do
{
option = menu();
switch (option)
{
case 1:
PopulateIndexUsingSDK();

break;
default:
break;
}
}
while (option != 0);
}

private static void PopulateIndexUsingSDK()
{
SearchIndexClient indexClient = GetSearchIndexClient();

UploadDocuments(indexClient);
}

private static SearchIndexClient GetSearchIndexClient()
{
string serviceName = ConfigurationManager.AppSettings["SearchServiceName"];
string apiKey = ConfigurationManager.AppSettings["ApiKey"];

SearchIndexClient indexClient = new SearchIndexClient(serviceName,"files", new SearchCredentials(apiKey));

return indexClient;
}

private static void UploadDocuments(SearchIndexClient indexClient)
{

try
{
var files = new files[]{
new files(){
DocumentId = "1",
Name = "Example Document Title 1",
Url = "http://www.example.com/mydocument1",
CreatedDate = "2012-02-01"
},
new files(){
DocumentId = "2",
Name = "Example Document Title 2",
Url = "http://www.example.com/mydocument2",
CreatedDate = "2012-02-01"
},
new files(){
DocumentId = "3",
Name = "Example Document Title 3",
Url = "http://www.example.com/mydocument3",
CreatedDate = "2012-02-01"
}
};
var batch = IndexBatch.Upload(files);
indexClient.Documents.Index(batch);
}
catch (IndexBatchException e)
{

Console.WriteLine(
"Failed to index some of the documents: {0}",
String.Join(", ", e.IndexingResults.Where(r => !r.Succeeded).Select(r => r.Key)));
}

// Wait a while for indexing to complete.
Thread.Sleep(2000);
}

private static int menu()
{
int value = 0;

Console.WriteLine("-----------------------------------");
Console.WriteLine("1.- Populate index using .NET SDK");
Console.WriteLine("0.- Exit");
Console.WriteLine("-----------------------------------");

do
{
Console.WriteLine("Enter a valid option: ");
value = Int16.Parse(Console.ReadLine());
}
while (value < 0 && value > 1);

return value;
}
}

Vamos a ver los elementos clave de este código. Obviamente, los métodos más importantes de nuestra aplicación de consola son 2.

SearchIndexClient()

Este método crea un nuevo objeto del tipo SearchIndexClient que nos va a permitir operar con el índice en cuestión. Para ello, obtiene del App.Config los datos relacionados con el servicio de búsqueda (api-key y servicename) y a continuación en el constructor de la clase ServiceIndexClient indica: el nombre del servicio de búsqueda, el nombre del índice y las credenciales para acceder al servicio.

UploadDocuments()

Este método se encarga de hacer la subida de documentos propiamente dicha. Para ello crea un array de objetos de tipo files, que tienen la siguiente definición:


class files
{
public string DocumentId { get; set; }
public string Name { get; set; }
public string Url { get; set; }
public string CreatedDate { get; set; }
}

Una vez ya se ha generado el array,  lo primero que se hace es crear un batch con la petición que se quiere hacer por medio de método IndexBatch.Upload(files).

A continuación por medio de la función indexClient.Documents.Index(batch) se hace la subida de los documentos al servicio Azure.

Se usa, para esperar y darle tiempo a que la indexación de documentos finalice correctamente Thread.Sleep(2000)

Ahora, podemos ejecutar la aplicación y ver los resultados. Si accedemos después al servicio de búsqueda de Azure, podemos ver que los elementos se han añadido correctamente la índice.

Captura de pantalla 2016-02-02 a las 22.24.17

Captura de pantalla 2016-02-02 a las 22.24.35

Os voy a dejar algunos enlaces que he usado para la entrada de hoy:

https://azure.microsoft.com/en-us/documentation/articles/search-howto-dotnet-sdk/

https://msdn.microsoft.com/en-us/library/azure/dn951165.aspx

Y esto es todo por hoy, en próximas entradas, veremos como usamos esto que hemos aprendido hoy y lo que vimos en la entrada anterior.

Autenticación app-only para usar la API Microsoft Graph en webjobs de Azure

para indexar contenido de Office 365 en este servicio Azure Search

Espero que os haya resultado interesante.