Azure Search使用方法总结

2022-04-25 00:00:00 字段 文档 方式 密钥 检索

前言

Azure 认知搜索是一种完全托管的云搜索服务,只需要将需要检索的数据上传到Azure Search服务上,就可以通过调用REST API的方式检索到想要的内容 ,我在使用Azure认知搜索服务的时候感觉很方便,因为它在使用的时候只需要去调用它的REST API就可以了,我们公司在使用Azure Search的时候采用的是后端发送HTTP请求得到搜索内容后后端加工之后再发送给前端,但我认为如果只是自己想要一个简单得搜索服务得小伙伴得话也完全可以前端直接使用检索后的内容,很方便。当然了想要自己使用这个服务的小伙伴要自己去注册Azure云服务,它里面大部分的服务都有免费的策略,我觉得这些免费策略足够我们去进行云服务的体验了。(注册时需要VISA信用卡)。接下来我回去介绍我在项目中接触到的Azure Search的使用方法,去实现一个从零开始的demo,内容肯定不会特别详细全面,有更大更深的需求的伙伴请直接去看官方文档。

介绍

付费策略

首先我介绍一下它的付费策略,毕竟用的是别人的服务是要花钱的。具体的付费策略就去官网上找吧,我只说一下免费的限制,免费的每一个服务限制多只能创建三个索引(索引的概念我下面会说)所以使用时要注意。

概念

接下来我介绍一下概念,这是认知某一个事物的开始。认知搜索包含 搜索服务索引(index)文档(document) 的概念

  • 搜索服务包含一个或多个索引。
  • 索引提供搜索文档的持久存储。同时索引也规定了存储数据的格式和数据检索时的规则
  • 搜索文档以 JSON 文档的形式从外部源加载,并推送到索引以使其可供搜索。

对于上面的概念,我认为索引可以理解为数据库里面得表,而文档就是表中得每一行数据,我觉得这样有助于理解,这样去想得话实际上Azure Search就是提供了可检索方式查询得数据库而已。不只是Azure Search包括作为搜索引擎内核的solr也是这样一个数据库

创建服务

说完了概念我就来简单说一下创建一个AzureSearch服务的操作方法。并带领大家创建一个简单的demo

1. 从Azure Portal创建AzureSearch服务与索引追加。

  • 首先进入Azure Portal选择Create a resource

  • 然后搜索Azure Cognitive Search点击创建创建时选择好订阅,资源组,以及收费策略(每个订阅下免费的只能创建一个)

  • 进入新创建的服务中选择Add index就可以选择创建索引。创建一个普通的索引我认为不需要选择Suggester。创建字段的时候选择相应的类型与属性。字段类型很好理解,就是这个字段存的是什么类型的数据。AzureSearch的索引字段类型我认为分为两大类,一类是基本类型,另一类是集合类型。其实也很好理解,基本类型就是我们比较熟悉的字符串,数字,布尔类型之类的,在AZAearch里面包括以下的基本类型(Edm.Boolean, Edm.ComplexType, Edm.DateTimeOffset, Edm.Double, Edm.GeographyPoint, Edm.Int32, Edm.Int64, Edm.String)。而集合类型就是以上各个类型的集合或者说数组,从类型的名字上看也可以理解这句话,比如string的集合就是Collection(Edm.String),所以我认为AZSearch的字段类型并不复杂。而属性就是指这个字段有什么作用,其中包括以下几种(Retrievable,Filterable,Sortable,Facetable,Searchable)我只用到过(Retrievable,Filterable,Searchable)。那么我认为其中Retrievable是每一个字段都需要的,因为只有把这个属性选上,该字段的值才能在返回值中返回。而Filterable则规定了这个字段是否可以通过逻辑判断语句进行筛。简单理解就是该字段是否可以通过value=?这种简单的方式进行判断,这种属性我认为适合id类型的字段只需要判断相等就可以了。而Searchable则是表示这个字段是否可以通过分词解析的方式进行检索,与该属性配套的需要选择它的解析器Analyzer,解析器可以选择它默认提供的也可以自定义。这个属性就是需要分词解析的字段需要制定的属性。

  • 点击创建之后就创建完成了,在Index Definition (JSON)中就可以看到创建的索引的JSON格式

2. 通过REST API追加文档。

追加文档有两种方式,一种是从Azure的其他存储服务中导入,另一种就是调用REST API插入数据。我没有使用过种导入的方式,我这次介绍一下第二种方式,当然调用API也是我们公司使用的方式。在上面创建索引的过程当中也可以使用调用API的方式创建,并且使用API创建是主要创建方式,具体内容我会在后面写。在调用API的时候需要遵守一定的规则

  • 必须通过 HTTPS (在默认端口 443) 上发出请求。
  • 请求必须在 URI 中包含 api 版本 。 此值必须设置为受支持的版本,格式如下: GET https://[search service name].search.windows.net/indexes?api-version=2020-06-30
  • 请求标头必须包含为你预配的搜索服务生成的 api 密钥 。 具有有效的密钥可以在发送请求的应用程序与处理请求的服务之间建立信任关系,这种信任关系以每个请求为基础。
  • 可以设置 Accept HTTP 标头。 如果未设置标头,则假定默认值为 application/json 。

以上的这些规则我觉得不必死记硬背,因为发送完请求出现问题时,自然会返回相应的错误信息,这是只要去看错误信息就可以知道请求时哪里有问题了。需要注意的是第三点,就是发送请求时必须要去验证api密钥,每个服务都有自己的密钥,我在之前添加文档的时候就会忘记换了一个别的服务的地址而忘了更改相应的密钥,这是后端就会返回来403错误。密钥的位置就在服务的Settings的keys里面打开就是了。在下面我复制了一下官网对于密钥的介绍,我的简单的记忆就是管理员钥拥有所有权限,查询密钥只有查询权限,查询密钥可以自己添加,知道这些我认为就够了,但为了详细,我还是在下面写了一遍

密钥 说明 限制
管理员密钥 管理密钥授予所有操作的完全权限,包括管理服务、获取状态和对象定义以及创建和删除 索引、 索引器 和 数据源 的能力。创建服务时,会自动生成两个管理 api 密钥(在门户中称为 " 主 密钥" 和 " 辅助 密钥"),并可按需单独重新生成。 由于有两个密钥,可以在滚动其中一个密钥时,使用另一个密钥来持续访问服务。只能在 HTTP 请求标头中指定管理密钥。 不能在 URL 中放置管理 api 密钥 。 每个服务多有 2 个管理员密钥
查询密钥 查询密钥向文档中的内容授予只读访问权限,通常分发给发出搜索请求的客户端应用程序。按需创建查询密钥。 可以在门户中手动创建查询密钥,或者通过管理 REST API 以编程方式创建查询密钥。可以在 HTTP 请求标头中为搜索、建议或查找操作指定查询密钥。 或者,可以在 URL 中以参数形式传递查询密钥。 根据客户端应用程序编写请求的方式,以查询参数的形式传递密钥可能更方便:GET /indexes/hotels/docs?search=*&$orderby=lastRenovationDate desc&api-version=2020-06-30&api-key=[query key] 每个服务 50 个密钥

我认为上面的内容是基础知识但并不是真正的应用,能够记住固然很好但记不住也无所谓,实践中去出了错再去比较,这样我认为记的会更牢固。知道了上面的内容,我就开始介绍如何追加文档,追加文档是通过调用下面这个API去实现的。

POST https://[service name].search.windows.net/indexes/[index name]/docs/index?api-version=[api-version]   
  Content-Type: application/json   
  api-key: [admin key]

相关文章