Tutorial: Create your first Azure Search index in the portal
In the Azure portal, start with a predefined sample dataset to quickly generate an index using the Import data wizard. Explore full text search, filters, facets, fuzzy search, and geosearch with Search explorer.
This code-free introduction gets you started with predefined data so that you can write interesting queries right away. While portal tools are not a substitute for code, tools are useful for these tasks:
- Hands on learning with minimal ramp-up
- Prototype an index before you write code in Import data
- Test queries and parser syntax in Search explorer
- View an existing index published to your service and look up its attributes
Time Estimate: About 15 minutes, but longer if account or service sign-up is also required.
Alternatively, ramp up using a code-based introduction to programming Azure Search in .NET.
If you don't want to provision a service immediately, you can watch a 6-minute demonstration of the steps in this tutorial, starting at about three minutes into this Azure Search Overview video.
Find your service
- Sign in to the Azure portal.
Open the service dashboard of your Azure Search service. If you didn't pin the service tile to your dashboard, you can find your service this way:
- In the Jumpbar, click More services at the bottom of the left navigation pane.
- In the search box, type search to get a list of search services for your subscription. Your service should appear in the list.
Check for space
Many customers start with the free service. This version is limited to three indexes, three data sources, and three indexers. Make sure you have room for extra items before you begin. This tutorial creates one of each object.
Tiles on the service dashboard show how many indexes, indexers, and data sources you already have. The Indexer tile shows success and failure indicators. Click the tile to view the indexer count.
Create an index and load data
Search queries iterate over an index containing searchable data, metadata, and constructs used for optimizing certain search behaviors.
To keep this task portal-based, we use a built-in sample dataset that can be crawled using an indexer via the Import data wizard.
Step 1: Start the Import data wizard
On your Azure Search service dashboard, click Import data in the command bar to start a wizard that both creates and populates an index.
In the wizard, click Data Source > Samples > realestate-us-sample. This data source is preconfigured with a name, type, and connection information. Once created, it becomes an "existing data source" that can be reused in other import operations.
Click OK to use it.
Step 2: Define the index
Creating an index is typically manual and code-based, but the wizard can generate an index for any data source it can crawl. Minimally, an index requires a name, and a fields collection, with one field marked as the document key to uniquely identify each document.
Fields have data types and attributes. The check boxes across the top are index attributes controlling how the field is used.
- 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 when fields used only in filter expressions.
- Filterable, Sortable, and Facetable determine whether a field can be used in a filter, a sort, or a facet 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.
By default, the wizard scans the data source for unique identifiers as the basis for the key field. Strings are attributed as retrievable and searchable. Integers are attributed as retrievable, filterable, sortable, and facetable.
Click OK to create the index.
Step 3: Define the indexer
Still in the Import data wizard, click Indexer > Name, and type a name for the indexer.
This object defines an executable process. You could put it on recurring schedule, but for now use the default option to run the indexer once, immediately, when you click OK.
To monitor data import, go back to the service dashboard, scroll down, and double-click the Indexers tile to open the indexers list. You should see the newly created indexer in the list, with status indicating "in progress" or success, along with the number of documents indexed.
Query the index
You now have a search index that's ready to query. Search explorer is a query tool built into the portal. It provides a search box so that you can verify whether search results are what you expect.
In the Azure Search Overview video, the following steps are demonstrated at 6m08s into the video.
Click Search explorer on the command bar.
Click Change index on the command bar to switch to realestate-us-sample.
Click Set API version on the command bar to see which REST APIs are available. Preview APIs give you access to new features not yet generally released. For the queries below, use the generally available version (2016-09-01) unless directed.
In the search bar, enter the query strings below and click Search.
searchparameter is used to input a keyword search for full text search, in this case, returning listings in King County, Washington state, containing Seattle in any searchable field in the document.
Search explorer returns results in JSON, which is verbose and hard to read if documents have a dense structure. Depending on your documents, you might need to write code that handles search results to extract important elements.
Documents are composed of all fields marked as retrievable in the index. To view index attributes in the portal, click realestate-us-sample in the Indexes tile.
&symbol is used to append search parameters, which can be specified in any order.
$count=trueparameter returns a count for the sum of all documents returned. You can verify filter queries by monitoring changes reported by
$top=100returns the highest ranked 100 documents out of the total. By default, Azure Search returns the first 50 best matches. You can increase or decrease the amount via
search=*is an empty search. Empty searches search over everything. One reason for submitting an empty query is to filter or facet over the complete set of documents. For example, you want a faceting navigation structure to consist of all cities in the index.
facetreturns a navigation structure that you can pass to a UI control. It returns categories and a count. In this case, categories are based on the number of cities. There is no aggregation in Azure Search, but you can approximate aggregation via
facet, which gives a count of documents in each category.
$top=2brings back two documents, illustrating that you can use
topto both reduce or increase results.
This query is facet for beds, on a text search for Seattle.
"beds"can be specified as a facet because the field is marked as retrievable, filterable, and facetable in the index, and the values it contains (numeric, 1 through 5), are suitable for categorizing listings into groups (listings with 3 bedrooms, 4 bedrooms).
Only filterable fields can be faceted. Only retrievable fields can be returned in the results.
search=seattle&$filter=beds gt 3
filterparameter returns results matching the criteria you provided. In this case, bedrooms greater than 3.
Filter syntax is an OData construction. For more information, see Filter OData syntax.
- Hit highlighting refers to formatting on text matching the keyword, given matches are found in a specific field. If your search term is deeply buried in a description, you can add hit highlighting to make it easier to spot. In this case, the formatted phrase
"granite countertops"is easier to see in the description field.
Full text search finds word forms with similar semantics. In this case, search results contain highlighted text for "mouse", for homes that have mouse infestation, in response to a keyword search on "mice". Different forms of the same word can appear in results because of linguistic analysis.
Azure Search supports 56 analyzers from both Lucene and Microsoft. The default used by Azure Search is the standard Lucene analyzer.
- Misspelled words, like 'samamish' for the Samammish plateau in the Seattle area, fail to return matches in typical search. To handle misspellings, you can use fuzzy search, described in the next example.
Fuzzy search is enabled when you specify the
~symbol and use the full query parser, which interprets and correctly parses the
Fuzzy search is available when you opt in for the full query parser, which occurs when you set
queryType=full. For more information about query scenarios enabled by the full query parser, see Lucene query syntax in Azure Search.
queryTypeis unspecified, the default simple query parser is used. The simple query parser is faster, but if you require fuzzy search, regular expressions, proximity search, or other advanced query types, you will need the full syntax.
search=*&$count=true&$filter=geo.distance(location,geography'POINT(-122.121513 47.673988)') le 5
The example query filters all results for positional data, where results are less than 5 kilometers from a given point (specified as latitude and longitude coordinates). By adding
$count, you can see how many results are returned when you change either the distance or the coordinates.
Geospatial search is useful if your search application has a 'find near me' feature or uses map navigation. It is not full text search, however. If you have user requirements for searching on a city or country by name, add fields containing city or country names, in addition to coordinates.
Modify any of the objects you just created. After you run the wizard once, you can go back and view or modify individual components: index, indexer, or data source. Some edits, such as the changing the field data type, are not allowed on the index, but most properties and settings are modifiable.
To view individual components, click the Index, Indexer, or Data Sources tiles on your dashboard to display a list of existing objects. To learn more about index edits that do not require a rebuild, see Update Index (Azure Search REST API).
Try the tools and steps with other data sources. The sample dataset,
realestate-us-sample, is from an Azure SQL Database that Azure Search can crawl. Besides Azure SQL Database, Azure Search can crawl and infer an index from flat data structures in Azure Table storage, Blob storage, SQL Server on an Azure VM, and Azure Cosmos DB. All of these data sources are supported in the wizard. In code, you can populate an index easily using an indexer.
All other non-indexer data sources are supported via a push model, where your code pushes new and changed rowsets in JSON to your index. For more information, see Add, update, or delete documents in Azure Search.
Learn more about other features mentioned in this article by visiting these links: