leveraging azure search in your application
Post on 19-Mar-2017
56 Views
Preview:
TRANSCRIPT
Leveraging Azure Search in You Application
Jeremy Hutchinson@hutchcodes
@hutchcodes
AgendaWhy use Azure SearchCreate an IndexPopulate the IndexSearchAdvanced Features
@hutchcodes
Search is fundamental
@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 +'%'
@hutchcodes
Background
@hutchcodes
Create a Search Service
@hutchcodes
@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; }
@hutchcodes
private ISearchIndexClient GetIndexClient(){ var client = GetServiceClient(); var indexClient = client.Indexes.GetClient(_indexName); return indexClient;}
@hutchcodes
Index FieldsTypes
BooleanDateTimeOffsetDoubleGeographyPointInt32Int64String
Collection(String)
@hutchcodes
Index FieldsTypes
BooleanDateTimeOffsetDoubleGeographyPointInt32Int64String
Collection(String)
PropertiesIsKeyIsSearchableIsFilterableIsFacetableIsRetreivableIsSortable
@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); }
@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; } }
@hutchcodes
internal void CreateIndex() { var serviceClient = GetServiceClient(); var definition = new Index() { Name = _indexName, Fields = FieldBuilder.BuildForType<Movie>() }; serviceClient.Indexes.Create(definition); }
@hutchcodes
@hutchcodes
Populating an Index
@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)); } }
@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); }
@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); }
@hutchcodes
@hutchcodes
Searching an Indexhttps://confoo.search.windows.net/indexes/movies/docs?api-version=2016-09-01&search=shining&api-key=F181ABA802361FA24024DAAF3D6AFD41
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
@hutchcodes
Analyzers35 analyzers backed by Lucene
50 analyzers back by Microsoft Natural Language Processing
@hutchcodes
Scaling and Pricing
@hutchcodes
Scaling and Pricing
Jeremy HutchinsonBlog
hutchcodes.netTwitter
@hutchcodesEmail
jrhutch@live.com
top related