• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
pealy
博客园    首页    新随笔    联系   管理    订阅  订阅

Windows Search Service

Windows Search Service是一个全方位的托管云服务,可以允许开发者通过.Net SDK或者REST API多种多样的搜索服务.

如果你想开发一个搜索服务,那么你的服务应该包含以下组件:

 

最简单的创建服务的步骤如下:

1.Provisioning a service

2.Define a shema for index

3.Load documents to index

4.Query the index

今天我们将通过REST API和.NET SDK两种方式来讲述如何创建index,load document,query index等.

方式1:REST API,将会借助PostMan这个工具。PostMan是Googel Chrome浏览器的一个组件,你可以通过访问Googel Chrome Store去下载.

在使用PostMan访问Search Service服务时我们需要先进行配置,点击Hearder按钮,输入如下值:

  • api-key:  [Admin Key]
  • Content-Type: application/json; charset=utf-8

1.Create an azure search index

URL:https://[SEARCH SERVICE].search.windows.net/indexes/trails?api-version=2015-02-28

Request Type:Put

Raw body content:

{
"name": "trails",
"fields": [
{"name": "id", "type": "Edm.String", "key": true, "searchable": false},
{"name": "name", "type": "Edm.String"},
{"name": "county", "type": "Edm.String"},
{"name": "elevation", "type": "Edm.Int32"},
{"name": "location", "type": "Edm.GeographyPoint"} ]
}

Click Send.

2.Post documents to an azure search index

URL:https://[SEARCH SERVICE].windows.net/indexes/trails/docs/index?api-version=2015-02-28

Request Type:Post

Raw body content:

{
  "value": [
    {"@search.action": "upload", "id": "233358", "name": "Pacific Crest National Scenic Trail", "county": "San Diego", "elevation":1294, "location": { "type": "Point", "coordinates": [-120.802102,49.00021] }}
]
}

Click Send.

3.Query documents from an azure search index

URL:https://[SEARCH SERVICE].search.windows.net/indexes/trails/docs?api-version=2015-02-28&search=trail

Request Type:Get

Click Send.

方式2:.NET SDK

下面的Demo中包含:创建Index,上传Documents,查询Docuemnts.

  1 class Program
  2     {
  3         static void Main(string[] args)
  4         {
  5             string searchServiceName = "Search Service Name";
  6             string apiKey = "API-Key";
  7 
  8             SearchServiceClient serviceClient = new SearchServiceClient(searchServiceName,new SearchCredentials(apiKey));
  9             DeleteHotelsIndexIfExists(serviceClient);
 10             Console.WriteLine("{0}", "Create index...\n");
 11             CreateHotelsIndex(serviceClient);
 12 
 13             Console.WriteLine("{0}", "Upload Document...\n");
 14             SearchIndexClient indexClient = serviceClient.Indexes.GetClient("hotels");
 15             UploadDocuments(indexClient);
 16 
 17             Console.WriteLine("Search Document from index");
 18             SearchDocuments(indexClient, "Fancy Stay");
 19 
 20             Console.ReadKey();
 21         }
 22 
 23         private static void DeleteHotelsIndexIfExists(SearchServiceClient serviceClient)
 24         {
 25             if(serviceClient.Indexes.Exists("hotels"))
 26             {
 27                 serviceClient.Indexes.Delete("hotels");
 28             }
 29         }
 30 
 31         private static void CreateHotelsIndex(SearchServiceClient serviceClient)
 32         {
 33             var definition = new Index()
 34             {
 35                 Name = "hotels",
 36                 Fields = new[]
 37                 {
 38                     new Field("hotelId",DataType.String) { IsKey=true},
 39                     new Field("hotelName",DataType.String) { IsSearchable=true,IsFilterable=true},
 40                     new Field("baseRate",DataType.Double) {IsFilterable=true,IsSortable=true },
 41                     new Field("category",DataType.String) { IsSearchable=true,IsFilterable=true}
 42 
 43                 }
 44             };
 45 
 46             serviceClient.Indexes.Create(definition);
 47         }
 48 
 49         private static void UploadDocuments(SearchIndexClient indexClient)
 50         {
 51             var documents =
 52                 new Hotel[]
 53                 {
 54                     new Hotel()
 55                     {
 56                         HotelId="1058-441",
 57                         HotelName="Fancy Stay",
 58                         BaseRate=199.0,
 59                         category="Luxury"
 60                     },
 61                     new Hotel()
 62                     {
 63                         HotelId="666-437",
 64                         HotelName="Roach Motel",
 65                         BaseRate=79.99,
 66                         category="Budget"
 67                     },
 68                     new Hotel()
 69                     {
 70                         HotelId="970-501",
 71                         HotelName="Econo-Stay",
 72                         BaseRate=199.0,
 73                         category="Luxury"
 74                     }
 75                 };
 76         
 77             try
 78             {
 79                 indexClient.Documents.Index(IndexBatch.Create(documents.Select(doc => IndexAction.Create(doc))));
 80 
 81             }
 82             catch (IndexBatchException e)
 83             {
 84                 Console.WriteLine("Failed to index some of the documents:{0}", string.Join(",", e.IndexResponse.Results.Where(r => !r.Succeeded).Select(r => r.Key)));
 85             }
 86             Thread.Sleep(2000);
 87 
 88         }
 89 
 90         private static void SearchDocuments(SearchIndexClient indexClient,string searchText,string filter=null)
 91         {
 92             var sp = new SearchParameters();
 93 
 94             if(!string.IsNullOrEmpty(filter))
 95             {
 96                 sp.Filter = filter;
 97             }
 98 
 99             DocumentSearchResponse<Hotel> response = indexClient.Documents.Search<Hotel>(searchText,sp);
100             foreach(SearchResult<Hotel> result in response)
101             {
102                 Console.WriteLine(result.Document);
103             }
104         }
105 
106 
107         }
View Code

 

posted @ 2015-11-13 11:05  jessicaxia  阅读(896)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3