This is part 2 of a 3 article series on getting started with Azure search on the below topics.
This article is a continuation of a previous article, at this
link.
If you are interested in watching video on same topics, please find it
here.
In this article, we will learn about Azure search concepts and terminologies like Index, Schema, Indexer, and data sources and will apply this concept by loading sample data in Azure search index and using search explorer to pass our search query and get data.
Index and Schema
Index in Azure search is equivalent to database table. You will create Index for a particular category of data which has its own schema (columns and column type). Data is then stored in Index as row, similar to any database table. For e.g, if you wanted to store Hotels listing data, you would create one Index with Hotel and create fields/columns like HotelId, Hotel Name, Description, Category, tags, Address, Rating, Rooms. Here address and rooms can be another complex type which has its own fields. We will talk about this schema later when we will load sample data.
Based on the pricing tier you select, you get a number of Indexes that can be created. Sample pricing tier is below.
You can create Index and its schema from Azure portal or progamatically using RESTP API/.NET SDK.
Let us see how to create Index from Portal (in this
article, we are automating this Index creation process from .NET SDK based on source data in XML).
Once you have Azure service created, you can see 'Add Index' as below.
We will get the below screen, provide Index name, primary key and add fields as per your requirement.
Dropdown in above screenshot tells us about different supported data type, you can refer this
link to more details.
If you notice, there are columns like filterable, sortable, facetable and searchable. Let us briefly see what this options means. The below explanation is taken from Offical Microsoft docs.
Retrievable means that it shows up in search results list. You can mark individual fields as off limits for search results by clearing this checkbox, for example for fields used only in filter expressions.
Filterable, Sortable, and Facetable determine whether fields are used in a filter, sort, or faceted navigation structure.
Searchable means that a field is included in full text search. Strings are searchable. Numeric fields and Boolean fields are often marked as not searchable.
Data sources and indexers
An indexer is a crawler that loads data in Index from external Azure data source with field to field mapping. Basically, it is kind of scheduler job which pulls data from data sources and puts in Index. Data sources are bascially stored data connections which will be used by Indexer. As of now, only Azure data sources are supported like,
- Azure SQL
- Azure Cosmos DB
- Azure Blob Storage
- Azure Table Storage
- SQL Server on Azure VM.
For your data which does not reside in any of the above, we have to programmatically push data to Index.
For creating Indexers, we have the below 3 options.
- Portal > Import Data Wizard (later in this article)
- Service REST API (refer from this link)
- .NET SDK (in my next article)
Now let us see how to load sample data in Azure search.
Go to portal.azure, and select your provisioned Azure search service. On Overview blade, find option 'Import data'.
Select datasource as samples,
Select hotels-sample, click on next
We will get an option to select congnitive search, skip this and go to Customize Target Index.
On the below screen, you can customize target Index schema. Please note that based on sample datasource it created a default index for us.
For the sake of simplicity, we will keep this as it as and move to next screen 'Create a Indexer'.
As this is sample data, we cannot create a schedule but if it would have been as datasource we could setup a schedule. Based on our schedule it would run jobs and pull data from the respective data source.
Click on Submit button. It will validate our configuration we selected and then create Index, Indexer and datasource.
Now we have create Index and sample data is imported in our Index. Let us now see how to use search explorer to see what data is loaded.
On the top navigation next to Import data, we will see option 'Search explorer', click on it.
It will give us below screen. Click on search without any change. It will load all the 50 documents as part of sample data.
Search explorer is using REST API, we can use oData filter expression to filter data like in the example.
$filter=HotelId eq '22'
If you try to filter with some field which is not marked as filterable, we will get below error.
$filter=HotelName eq 'Regal Orb Resort'
"Invalid expression: 'HotelName' is not a filterable field. Only filterable fields can be used in filter expressions.\r\nParameter name: $filter"
You can learn more about query parameter at this offical microsoft
link.
Conclusion
In this article, we have learned about,
- Index and schema
- Indexer and data sources
- Loading sample data in Azure Search Index.
- Using search explorer.
Please refer to this next
article, if you want to learn how to automate operations like creating index, loading data from custom data source (xml file), and querying data by passing diffrent search parameters and options using .NET SDK.