Step by step: .Net Core and Azure Search is small introduction on how to connect to Azure Search, create and delete indexes, models, add documents and perform basic queries.
Let’s go for it:
Create an Azure Search service
Create an Azure Search service in your Azure subscription, and get the Azure Search name and primary Read-Write key.
Find the steps here.
Create a folder for your project
Open a command prompt and run:
1mkdir netCoreAzureSearch
Create the project
1cd netCoreAzureSearch
2dotnet new console
Add a reference to Microsoft.Azure.Search
Microsoft.Azure.Search will allow your application to talk with Azure Search.
1dotnet add package Microsoft.Azure.Search -v 3.0.4
2dotnet restore
Replace the content of Program.cs
Replace the content of Program.cs with the following contents and be sure to replace the values in lines 13 and 16 with the Azure Search service name and key from step 1:
1namespace netCoreAzureSearch
2{
3 using System;
4 using Microsoft.Azure.Search;
5 using System.Linq;
6 using System.Collections.Generic;
7 using Microsoft.Azure.Search.Models;
8
9 class Program
10 {
11 static void Main(string[] args)
12 {
13 var azureSearchName = "[Your Azure Search Name]";
14
15 // The key to you cosmosdb
16 var azureSearchKey = "[Your Azure Search Key]";
17
18 // Index name variable
19 string indexName = "books";
20
21 // Create a service client connection
22 ISearchServiceClient azureSearchService = new SearchServiceClient(azureSearchName, new SearchCredentials(azureSearchKey));
23
24 // Get the Azure Search Index
25 ISearchIndexClient indexClient = azureSearchService.Indexes.GetClient(indexName);
26
27 // If the Azure Search Index exists delete it.
28 Console.WriteLine( "Deleting index...\n");
29 if (azureSearchService.Indexes.Exists(indexName))
30 {
31 azureSearchService.Indexes.Delete(indexName);
32 }
33
34 // Create an Index Model
35 Console.WriteLine( "Creating index Model...\n");
36 Index indexModel = new Index()
37 {
38 Name = indexName,
39 Fields = new[]
40 {
41 new Field("ISBN", DataType.String) { IsKey = true, IsRetrievable = true, IsFacetable = false },
42 new Field("Titulo", DataType.String) {IsRetrievable = true, IsSearchable = true, IsFacetable = false },
43 new Field("Autores", DataType.Collection(DataType.String)) {IsSearchable = true, IsRetrievable = true, IsFilterable = true, IsFacetable = false },
44 new Field("FechaPublicacion", DataType.DateTimeOffset) { IsFilterable = true, IsRetrievable = false, IsSortable = true, IsFacetable = false },
45 new Field("Categoria", DataType.String) { IsFacetable = true, IsFilterable= true, IsRetrievable = true }
46
47 }
48 };
49
50 // Create the Index in AzureSearch
51 Console.WriteLine( "Creating index...\n");
52 var resultIndex = azureSearchService.Indexes.Create(indexModel);
53
54 // Add documents to the Index
55 Console.WriteLine( "Add documents...\n");
56 var listBooks = new BookModel().GetBooks();
57 indexClient.Documents.Index(IndexBatch.MergeOrUpload<BookModel>(listBooks));
58 System.Threading.Thread.Sleep(1000);
59
60 // Search by word
61 Console.WriteLine("{0}", "Searching documents 'Cloud'...\n");
62 Search(indexClient, searchText: "Cloud");
63 System.Threading.Thread.Sleep(1000);
64
65 // Search everything and filter
66 Console.WriteLine("\n{0}", "Filter documents by Autores 'Eugenio Betts'...\n");
67 Search(indexClient, searchText: "*", filter: "Autores / any(t: t eq 'Eugenio Betts')");
68 System.Threading.Thread.Sleep(1000);
69
70 // Search everything and order
71 Console.WriteLine("\n{0}", "order by FechaPublicacion\n");
72 Search(indexClient, searchText: "*", order: new List<string>() { "FechaPublicacion" });
73 System.Threading.Thread.Sleep(1000);
74
75 //Search everything and facet
76 Console.WriteLine("\n{0}", "Facet by Categoria \n");
77 Search(indexClient, searchText: "*", facets: new List<string>() { "Categoria" });
78 System.Threading.Thread.Sleep(1000);
79 }
80
81 private static void Search(ISearchIndexClient indexClient, string searchText, string filter = null, List<string> order = null, List<string> facets = null)
82 {
83 // Execute search based on search text and optional filter
84 var sp = new SearchParameters();
85
86 // Add Filter
87 if (!String.IsNullOrEmpty(filter))
88 {
89 sp.Filter = filter;
90 }
91
92 // Order
93 if (order != null && order.Count > 0)
94 {
95 sp.OrderBy = order;
96 }
97
98 // facets
99 if (facets != null && facets.Count > 0)
100 {
101 sp.Facets = facets;
102 }
103
104 // Search
105 DocumentSearchResult<BookModel> response = indexClient.Documents.Search<BookModel>(searchText, sp);
106
107 foreach (SearchResult<BookModel> result in response.Results)
108 {
109 Console.WriteLine(result.Document + " - Score: " + result.Score);
110 }
111
112 if (response.Facets != null)
113 {
114 foreach (var facet in response.Facets)
115 {
116 Console.WriteLine("\n Facet Name: " + facet.Key);
117 foreach (var value in facet.Value)
118 {
119 Console.WriteLine("Value :" + value.Value + " - Count: " + value.Count);
120 }
121 }
122 }
123 }
124 }
125
126 /// <summary>
127 /// A simple class representing a book
128 /// </summary>
129 public class BookModel
130 {
131 public string ISBN { get; set; }
132 public string Titulo { get; set; }
133 public List<string> Autores { get; set; }
134 public DateTimeOffset FechaPublicacion { get; set; }
135 public string Categoria { get; set; }
136
137 public List<BookModel> GetBooks()
138 {
139 var listBooks = new List<BookModel>();
140 listBooks.Add(new BookModel()
141 {
142 ISBN = "9781430224792",
143 Titulo = "Windows Azure Platform (Expert's Voice in .NET)",
144 Categoria = "Comic",
145 Autores = new List<string>() {"Redkar", "Tejasw" },
146 FechaPublicacion = DateTimeOffset.Now.AddDays(-2)
147 });
148
149 listBooks.Add(new BookModel()
150 {
151 ISBN = "9780470506387",
152 Titulo = "Cloud Computing with the Windows Azure Platform",
153 Categoria = "Terror",
154 Autores = new List<string>() { "Roger Jennings"},
155 FechaPublicacion = DateTimeOffset.Now
156 });
157
158 listBooks.Add(new BookModel()
159 {
160 ISBN = "9780889222861",
161 Titulo = "Azure Blues",
162 Categoria = "Terror",
163 Autores = new List<string>() { "Gilbert", "Gerry", "Rogery Landing"},
164 FechaPublicacion = DateTimeOffset.Now.AddMonths(-3)
165 });
166
167 listBooks.Add(new BookModel()
168 {
169 ISBN = "9780735649675",
170 Titulo = "Moving Applications to the Cloud on the Microsoft Azure(TM) Platform",
171 Categoria = "Fiction",
172 Autores = new List<string>() { "Pace", "Eugenio Betts", "Dominic Densmore", "Scott; Dunn", "Ryan Narumoto", "Masashi Woloski", "Matias" },
173 FechaPublicacion = DateTimeOffset.Now
174 });
175
176 return listBooks;
177 }
178
179 public override string ToString()
180 {
181 return "ISBN: " + this.ISBN + " - titulo: " + this.Titulo + " - Autores: " + String.Join(", ", this.Autores);
182 }
183 }
184}
Run the application
Run the following commands:
1dotnet build
2dotnet run
You can get the code here.
See you soon!
Comments