Azure. Nuevo servicio de búsqueda ¿cómo el de SharePoint?

Recién publicado tenemos el servicio de búsqueda de Azure, un servicio que nos permite indexar documentos y hacer consultas de ellos mediante una API REST. Tened en cuenta que es una Preview y que puede que nos falten funcionalidades, aun así puede ser un servicio que nos permita mejorar nuestras aplicaciones por un coste razonable.

De momento, no ofrece el potencial que nos ofrece el servicio de búsqueda de SharePoint y veo dos funcionalidades claves que por ahora no tenemos en el servicio de Azure:

  • Indexado del contenido de documentos que realiza el servicio de búsqueda de SharePoint, mediante el uso de IFilters. Si, empezamos este post contando que el servicio de Azure nos permite indexar documentos pero esos documentos no son más que estructuras de datos JSON, y, de momento, no permite la inserción o el rastreo de archivos.
  • Rastreo de orígenes externos que tanto valor nos aporta en SharePoint, pudiendo programar el indexado de carpetas compartidas, carpetas de Exchange, sitios webs, etc. El servicio de Azure requiere que le enviemos los datos a indexar al servicio.

Qué nos ofrece el servicio de búsqueda en Azure

  • Escalado de particiones del índice, incrementando el número de documentos indexados, y réplicas del índice para mejorar el rendimiento en las consultas.
  • API REST con autenticación por clave para administrar los índices y realizar consultas sobre estos. Puedes usar OData para las consultas.
  • Múltiples índices pero de momento sólo se puede consultar uno cada vez
  • Búsqueda en todo el texto o Full-text
  • Modelos de clasificación personalizables para optimizar las búsquedas y acercarlas a las necesidades del negocio.
  • Navegación por atributos del índice con cada consulta.
  • Sugerencias de consultas
  • Destacado del texto que se busca en la consulta.

¿Cómo creamos un servicio de búsqueda en Azure?

Esta es la parte más fácil, como casi todo en Azure. Desde el nuevo Portal de Azure (en Preview) podemos crear un servicio de Search que se encuentra en la sección de “Data, storage, cache, + backup”.

 

Como podemos ver en la imagen anterior, tenemos dos modos de servicio, Free o Standard. Si estás haciendo pruebas o desarrollando, las capacidades del Free son más que suficiente para la mayoría de escenarios.

Una vez creado el servicio, podemos acceder a la URL desde la opción “PROPERTIES” y a las claves para la API desde la opción de “KEYS”, con estas propiedades podemos empezar a desarrollar.

Creamos un Índice

Lo primero que tenemos que hacer es crear nuestro primer índice con los campos de los documentos que queremos indexar. Para esto enviamos al servicio un objeto JSON con los campos que necesitamos por HTTP PUT a /indexes/[nombre del índice].

//apiKey es la clave de acceso al servicio de búsqueda en Azure

client.DefaultRequestHeaders.Add(“api-key”, apiKey);

client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(“application/json”));

//searchUrl es la url del servicio en Azure y searchVersion es la versión actual de la API (?api-version=2014-07-31-Preview)

var url = searchUrl + “/indexes/autores” + searchVersion;

var response = await client.PutAsync(url, new StringContent(jsonObject.ToString(), Encoding.UTF8, “application/json”));

var content = response.Content.ReadAsStringAsync();

 

y el objeto que enviamos con los campos:

{

“name”: “autores”,

“fields”: [

{

“name”: “email”,

“type”: “Edm.String”,

“key”: true,

“searchable”: true

},

{

“name”: “name”,

“type”: “Edm.String”,

“key”: false,

“searchable”: true

},

{

“name”: “bio”,

“type”: “Edm.String”,

“key”: false,

“searchable”: true

},

{

“name”: “url”,

“type”: “Edm.String”,

“key”: false,

“searchable”: false

},

{

“name”: “tags”,

“type”: “Collection(Edm.String)”,

“key”: false,

“searchable”: true

}

]

}

Enviamos documentos al índice

Una vez creado nuestro índice, podemos enviar documentos para que sean indexados y estén disponibles para la búsqueda. Esto lo hacemos por HTTP POST a /indexes/[nombre del índice]/docs/index, como podemos ver en el siguiente ejemplo:

var url = searchUrl + “/indexes/autores/docs/index” + searchVersion;

var response = await client.PostAsync(url, new StringContent(jsonObject.ToString(), Encoding.UTF8, “application/json”));

var content = response.Content.ReadAsStringAsync();

 

al que enviamos el siguiente objeto JSON con los documentos a crear:

{

“value”: [

{

“@search.action”: “upload”,

“email”: “addiacer@gmailcom”,

“name”: “Adrián Díaz”,

“bio”: “Adrián Díaz es Ingeniero de Informática por la Universidad Politécnica de Valencia, MCPD de SharePoint 2010, MAP y MCC 2012. Cofundador del grupo de usuarios de SharePoint de Levante LevaPoint. Lleva desarrollando con tecnologías Microsoft más de 10 años y desde hace 3 años está centrado en el desarrollo sobre SharePoint. Actualmente trabaja en el departamento de desarrollo de ENCAMINA una consultora informática de Valencia que se destaca por realizar soluciones basadas en Tecnología Microsoft, principalmente en SharePoint.”,

“url”: “www.compartimoss.com/autores/adriandiaz”

“tags”: [

“MVP”,

“SharePoint”

]

},

{

“@search.action”: “upload”,

“email”: “santypr@gmailcom”,

“name”: “Santiago Porras”,

“bio”: “UX Developer, experto en desarrollo de experiencias de usuario de soluciones de cualquier ámbito y tecnología, actualmente trabajando en ENCAMINA. Enamorado de SharePoint desde que pude tomar contacto por primera vez, me apasionan las nuevas tecnologías y actualmente mi interés se centra en SharePoint 2010, SharePoint 2013, Windows Azure, ASP.NET MVC 4, Windows 8, Windows Phone y HTML5. Además, compagino mi vida laboral con la difusión de conocimientos y ayuda tecnológica mediante mi participación en TenerifeDev, grupo de usuarios de .NET de Tenerife, como moderador de los foros de SharePoint en MSDN y TechNet y, escribiendo artículos tanto en mi blog personal en Geeks, como algunas veces aquí en la revista digital CompartiMOSS . También podrás encontrarme en Twitter microparticipando con el usuario @saintwukong”,

“url”: “www.compartimoss.com/autores/santiagoporras”

“tags”: [

“MVP”,

“Client Development”

]

}

]

}

Buscar sobre los documentos

Ahora viene la parte más interactiva que nos permite realizar consultas sobre nuestro índice que nos devuelven documentos que cumplan con esas consultas, bien porque está en un campo que es buscable o bien porque especificamos el campo en el que queremos buscar.

Hacer una búsqueda es tan sencillo como hacer un HTTP GET a la url /indexes/[nombre del índice]/docs?QUERY, por ejemplo: /indexes/autores/docs?search=TenerifeDev lo que nos responde con el siguiente JSON con los documentos que ha encontrado y la clasificación de cada documento en función de la búsqueda:

{

    “@odata.context”:”https://adiazcan.search.windows.net/indexes(‘autores’)/$metadata#docs(email,name,bio,tags)”,

    “value”:

    [

        {

        “@search.score”:0.025214419,

        “email”:”santypr@gmailcom”,

        “name”:”Santiago Porras”,

        “bio”:”UX Developer, experto en desarrollo de experiencias de usuario de soluciones de cualquier u00e1mbito y tecnologu00eda, actualmente trabajando en ENCAMINA. Enamorado de SharePoint desde que pude tomar contacto por primera vez, me apasionan las nuevas tecnologu00edas y actualmente mi interu00e9s se centra en SharePoint 2010, SharePoint 2013, Windows Azure, ASP.NET MVC 4, Windows 8, Windows Phone y HTML5. Ademu00e1s, compagino mi vida laboral con la difusiu00f3n de conocimientos y ayuda tecnolu00f3gica mediante mi participaciu00f3n en TenerifeDev, grupo de usuarios de .NET de Tenerife, como moderador de los foros de SharePoint en MSDN y TechNet y, escribiendo artu00edculos tanto en mi blog personal en Geeks, como algunas veces aquu00ed en la revista digital CompartiMOSS . Tambiu00e9n podru00e1s encontrarme en Twitter microparticipando con el usuario @saintwukong”,

        “tags”:[“MVP”,”Client Development”]

        }

    ]

}

Todo esto y mucho más es lo que nos ofrece el servicio de búsqueda de Azure, de momento no tiene todas las capacidades que nos puede dar el servicio de búsqueda de SharePoint pero con el tiempo es posible que se acerque. Además, con el mecanismo de autenticación basado en claves, es mucho más sencillo integrar nuestros desarrollos que frente a SharePoint y para muchas aplicaciones es una necesidad cada vez más común la inclusión de búsqueda de contenidos. Una nueva pieza del puzzle de Azure que hay que seguir y tener en cuenta.

 

Saludos a todos…