zoukankan      html  css  js  c++  java
  • 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...
    ");
     11             CreateHotelsIndex(serviceClient);
     12 
     13             Console.WriteLine("{0}", "Upload Document...
    ");
     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
  • 相关阅读:
    VB.NET中lambda的写法
    C#中DllImport用法和路径问题
    SQL*Loader 和 Data Pump
    批处理-函数定义及应用01
    Office 2010 KMS激活原理和案例分享
    Hyper-V架构与VMware ESXi的差异
    Tomcat免安装配置2
    Tomcat免安装配置
    域名解析过程
    内部类访问的局部变量必须加final
  • 原文地址:https://www.cnblogs.com/jessicaxia/p/4961541.html
Copyright © 2011-2022 走看看