26
Leveraging Azure Search in You Application Jeremy Hutchinson @hutchcodes

Leveraging Azure Search in Your Application

Embed Size (px)

Citation preview

Page 1: Leveraging Azure Search in Your Application

Leveraging Azure Search in You Application

Jeremy Hutchinson@hutchcodes

Page 2: Leveraging Azure Search in Your Application

@hutchcodes

AgendaWhy use Azure SearchCreate an IndexPopulate the IndexSearchAdvanced Features

Page 3: Leveraging Azure Search in Your Application

@hutchcodes

Search is fundamental

Page 4: Leveraging Azure Search in Your Application

@hutchcodes

Why use Azure Search

var items = from i in db.Items             where i.Name.Contains(searchString)       || i.Name.Contains(searchString);

select * from Items where Name like '%' + @search +'%' or Desc like '%' + @search +'%'

Page 5: Leveraging Azure Search in Your Application

@hutchcodes

Background

Page 6: Leveraging Azure Search in Your Application

@hutchcodes

Create a Search Service

Page 7: Leveraging Azure Search in Your Application

@hutchcodes

Page 8: Leveraging Azure Search in Your Application

@hutchcodes

public class SearchHelper {     private string _searchName = "confoo";    private string _indexName = "movies";     private string _apiKey = “123457890";

    private SearchServiceClient GetServiceClient()    {         var creds = new SearchCredentials(_apiKey);        var client = new SearchServiceClient(_searchName, creds);        return client;     }

Page 9: Leveraging Azure Search in Your Application

@hutchcodes

private ISearchIndexClient GetIndexClient(){ var client = GetServiceClient(); var indexClient = client.Indexes.GetClient(_indexName); return indexClient;}

Page 10: Leveraging Azure Search in Your Application

@hutchcodes

Index FieldsTypes

BooleanDateTimeOffsetDoubleGeographyPointInt32Int64String

Collection(String)

Page 11: Leveraging Azure Search in Your Application

@hutchcodes

Index FieldsTypes

BooleanDateTimeOffsetDoubleGeographyPointInt32Int64String

Collection(String)

PropertiesIsKeyIsSearchableIsFilterableIsFacetableIsRetreivableIsSortable

Page 12: Leveraging Azure Search in Your Application

@hutchcodes

internal void CreateIndex() {     var serviceClient = GetServiceClient();     var definition = new Index()     {         Name = _indexName,         Fields = new[]         {             new Field("Id", DataType.String)             {                 IsFilterable = true,                 IsKey = true  }        }     };     serviceClient.Indexes.Create(definition); }

Page 13: Leveraging Azure Search in Your Application

@hutchcodes

public class Movie { [Key] [IsRetrievable(true), IsFilterable]    public int Id { get; set; }

[IsRetrievable(true), IsSearchable, IsSortable]    public string Title { get; set; }

[IsRetrievable(true), IsSearchable]    public string SpanishTitle { get; set; } [IsRetrievable(true), IsFilterable, IsSortable]    public int Year { get; set; }

[IsRetrievable(true), IsFacetable, IsFilterable]     public List<string> GenreTags { get; set; } }

Page 14: Leveraging Azure Search in Your Application

@hutchcodes

internal void CreateIndex() {     var serviceClient = GetServiceClient();     var definition = new Index()     {         Name = _indexName,         Fields = FieldBuilder.BuildForType<Movie>()    };     serviceClient.Indexes.Create(definition); }

Page 15: Leveraging Azure Search in Your Application

@hutchcodes

Page 16: Leveraging Azure Search in Your Application

@hutchcodes

Populating an Index

Page 17: Leveraging Azure Search in Your Application

@hutchcodes

public void UpdateIndex(IEnumerable<Movie> searchItems) {     var client = GetIndexClient();     var actions = new List<IndexAction<Movie>>();     foreach (var item in searchItems)     {         actions.Add(IndexAction.Upload(item));         if (actions.Count == 1000) //Max upload size 1000         {             client.Documents.Index(new IndexBatch<Movie>(actions));             actions.Clear();        }     } if (actions.Count > 0) { client.Documents.Index(new IndexBatch<Movie>(actions)); } }

Page 18: Leveraging Azure Search in Your Application

@hutchcodes

internal void CreateDataSource() {     var searchClient = GetServiceClient();     var dataSource = new DataSource()     {         Name = _dataSourceName,         Type = DataSourceType.AzureSql,         Credentials = new DataSourceCredentials(_connectionString),         Container = new DataContainer("MoviesForAzureSearch")     };     searchClient.DataSources.Create(dataSource); }

Page 19: Leveraging Azure Search in Your Application

@hutchcodes

internal void CreateIndexer() {     var searchClient = GetServiceClient();     var indexer = new Indexer()     {         TargetIndexName = _indexName,         Name = _indexerName,         Schedule = new IndexingSchedule(new TimeSpan(0, 5, 0)),         DataSourceName = _dataSourceName     };     searchClient.Indexers.Create(indexer); }

Page 20: Leveraging Azure Search in Your Application

@hutchcodes

Page 22: Leveraging Azure Search in Your Application

public DocumentSearchResult<Movie> Search(string search) {     var client = GetIndexClient();

    var searchParams = new SearchParameters();     searchParams.IncludeTotalResultCount = true;     searchParams.QueryType = QueryType.Full;     searchParams.SearchMode = SearchMode.Any;     searchParams.Select = new[] { "Title", "Year", "GenreTags"};

    return client.Documents.Search<Movie>(search, searchParams);}

@hutchcodes

Page 23: Leveraging Azure Search in Your Application

@hutchcodes

Analyzers35 analyzers backed by Lucene

50 analyzers back by Microsoft Natural Language Processing

Page 24: Leveraging Azure Search in Your Application

@hutchcodes

Scaling and Pricing

Page 25: Leveraging Azure Search in Your Application

@hutchcodes

Scaling and Pricing

Page 26: Leveraging Azure Search in Your Application

Jeremy HutchinsonBlog

hutchcodes.netTwitter

@hutchcodesEmail

[email protected]