Azure Search

Azure Search

Many applications use search capabilities to interact with its users. This should be done quickly and effectively, meeting the expectations you have; showing suggestions, supporting multiple languages and search by categories, among other things.

Normally these requirements are developed using on-premises database technologies, which must be configured and adjusted to achieve the intended performance. Likewise, infrastructure costs must be met in order for the functionality to be usable regardless of the device.

Azure Search is a Microsoft Azure service which enables to have an extremely efficient search service and possess capabilities that make it extremely useful for application development.

Essentially, it consists of a cloud service, which is presented  through a REST API (although an SDK for .NET is also provided). This API allows searches not only on our application data, but also synchronizing them with the search service. In addition, if some data sources provided by Azure itself are used, this synchronization may possibly happen automatically.

How do I use it?

First of all, you need to create an instance of an Azure Search service for a subscription. This is done in the Azure Portal, adding a new subscription service, which is located on the Web and Mobile category.

After creating the service, the succeeding is to add an Index. An Index is in Azure Search the equivalent of a table in the relational model. It contains data linked through a scheme. For instance, you can store information from a Blog, meaning all posts from all users.

To create an Index, you need to assign the fields that will have the documents stored in it. A document is alike a row in a table in the relational model. These fields will have a data type that can be:

  • String
  • String collections
  • Int32
  • Int64
  • Double
  • Boolean
  • Date and Time
  • Geographic Point

In turn, each field may have the following properties:

  • Retrievable
    • When a search is performed, this field may be returned as a result of the search.
  • Filterable
    • When a search is performed, this field may be used in a query filter.
  • Sortable
    • When a search is performed, this field may be used to sort results.
  • Classifiable
    • Enables categorizing a document, so that it can be grouped by this attribute when performing a Faceted Navigation
  • Searchable
    • When a search is performed, this field can be used to search using Full-Text Search. It can only be selected if the data type is string.

Once you have set the Index, it is necessary to synchronize the information from the database to the Index in order to index the documents and perform searches on them. This can be done in two ways. The first is to choose as a data source one of the following storage services that Azure provides:

  • Blob Storage
  • DocumentDB
  • Azure SQL Database
  • SQL Server on Azure VM

The second option is to update the index from the software that loads the information, so as to keep the index synchronized. This can be done in two ways: using a REST API offered by Azure Search or using the .NET SDK for Azure Search.

There are multiple types of actions that can be run on an Index to synchronize information. In addition, many batch documents can be sent with several different actions to perform this synchronization.

Possible actions are as follows:

  • Upload
    • Indexes a new document
  • Merge
    • Upgrades an existing document with the new data.
  • Merge or Upload
    • If you refer an existing document it is updated, otherwise a new one is created.
  • Delete
    • Deletes a document from the Index.

If you use the .NET SDK you can model the documents as classes and add different decorators to their attributes or to the classes themselves to help in the serialization.

Queries

There are two types of queries:

  • Search
    • Performs the search on all fields with the “Searchable” attribute.
    • Uses Full-Text Search automatically.
    • Simple Query and Lucene syntax can be used.
  • Filter
    • OData syntax can be used.


 

Muchas aplicaciones utilizan capacidades de búsqueda para interactuar con sus usuarios. Esto debe hacerse de manera rápida y efectiva, cumpliendo con las expectativas que se tiene; mostrando sugerencias, soportando múltiples lenguajes y búsqueda por categorías, entre otras cosas.

Normalmente estos requerimientos son desarrollados utilizando tecnologías de bases de datos on-premises, las cuales deben ser configuradas y ajustadas para lograr la performance deseada. A su vez, se deben afrontar costos por infraestructura para que la funcionalidad sea usable sin importar el dispositivo.

Azure Search, es un servicio de Microsoft Azure que permite, tener un servicio de búsqueda sumamente eficiente y que posee capacidades que lo vuelven sumamente práctico para el desarrollo de aplicaciones.

Básicamente, consta de un servicio en la nube, que es expuesto mediante una REST API (aunque también se provee un SDK para .NET). Esta API permite no solamente realizar búsquedas sobre los datos de nuestra aplicación, sino también sincronizar los mismos con el servicio de búsqueda. Adicionalmente, en caso de que se utilicen algunos orígenes de datos provistos por el mismo Azure, es posible que esta sincronización se dé automáticamente.

¿Cómo Utilizarlo?

Primero que nada, es necesario crear una instancia de un servicio de Azure Search para una suscripción. Esto se hace en el Portal de Azure, agregando un nuevo servicio a la suscripción, el cual se encuentra en la categoría Web y Móvil.

Luego de crear el servicio, lo siguiente es agregar un Index. Un Index es en Azure Search el equivalente a una tabla en el modelo relacional. Contiene datos relacionados a través de un esquema. Por ejemplo, se podría almacenar la información de un Blog. Es decir, todos los post de todos los usuarios.

Para crear un Index, se necesitan asignarle los campos que tendrán los documentos almacenados en el mismo. Un documento es el equivalente de una fila de una tabla en el modelo relacional. Estos campos tendrán un tipo de dato que puede ser:

  • String
  • Colección de Strings
  • Int32
  • Int64
  • Double
  • Booleano
  • Fecha y Hora
  • Punto Geográfico

A su vez, cada campo puede tener las siguientes propiedades:

  • Recuperable (Retrievable)

o   Cuando se realice una búsqueda, este campo podrá ser devuelto como resultado de la misma.

  • Filtrable (Filterable)

o   Cuando se realice una búsqueda, este campo podrá ser utilizado en un filtro de consulta (filter query).

  • Ordenable (Sortable)

o   Cuando se realice una búsqueda, este campo podrá ser utilizado para ordenar los resultados.

  • Clasificable (Facetable)

o   Permite categorizar un documento, de modo que pueda ser agrupado por este atributo al realizar una Navegación Clasificada (Faceted Navigation)

  • Buscable (Searchable)

o   Cuando se realice una búsqueda, este campo podrá ser utilizado para buscar utilizando Full-text Search. Sólo puede ser elegido si el tipo de datos es String.

Después de tener un Index configurado, es necesario sincronizar la información de la base de datos hacia el Index para poder indizar los documentos y poder realizar búsquedas sobre los mismos. Esto puede realizarse de dos maneras. La primera consiste en elegir como origen de datos uno de los siguientes servicios de almacenamiento que ofrece Azure:

  • Blob Storage
  • DocumentDB
  • Azure SQL Database
  • SQL Server on Azure VM

La segunda opción consiste en actualizar el índice desde el software que cargue la información, de modo de mantener sincronizado el índice. Esto puede hacerse de dos maneras: Utilizando una REST API que ofrece Azure Search o utilizando el .NET SDK para Azure Search.

Existen varios tipos de acciones que se pueden ejecutar sobre un Index para poder sincronizar la información. Además, se pueden enviar muchos documentos en batch con varias acciones diferentes para realizar esta sincronización.

Las acciones posibles son las siguientes:

  • Upload

o   Indexa un nuevo doumento.

  • Merge

o   Actualiza un documento existente con los nuevos datos.

  • MergeOrUpload

o   Si se le pasa un documento existente lo actualiza y sino crea uno nuevo.

  • Delete

o   Borra un documento del Index.

Si se utiliza el .NET SDK se pueden modelar los documentos como clases y agregarles diferentes decorators a sus atributos o a las clases mismas para ayudar en la serialización.

Consultas

Hay dos tipos de consultas:

  • Búsqueda

o   Realiza la búsqueda sobre todos los campos que tengan el atributo “Searchable”.

o   Utiliza Full-Text Search automáticamente.

o   Puede utilizarse sintaxis Simple Query y Lucene.

  • Filtro

o   Puede utilizarse sintaxis OData.

Share This