天天看点

ElasticStack核心应用场景企业搜索介绍

本文收录至《Elastic Stack 实战手册》,欢迎和我一起解锁开发者共创书籍,系统学习 ElasticsStack。 https://developer.aliyun.com/topic/elasticstack/playbook

ElasticStack核心应用场景企业搜索介绍

什么是企业搜索

企业搜索,顾名思义,就是企业使用的搜索服务或者说是企业提供的搜索服务。具体可以是企业的客户,使用企业提供的搜索服务,搜索企业提供的产品、服务等信;比如电商企业提供搜索服务供客户搜索商品信息、应用市场提供搜素服务供用户查找 APP 等;也可能是企业内部各个部门成员,使用企业内部的搜索服务,搜索企业内的各种信息,比如项目信息、代码信息、文档信息等等。

企业搜索的特点

企业搜索因为不同的使用场景,具有其自己的特点。相较于大家熟悉和常用的百度、谷歌等互联网搜素,企业搜索有如下不同:

数据来源不同

众所周知,百度、谷歌等互联网搜索引擎,主要通过网络爬虫抓取互联网上的数据;而企业搜索的数据主要来源于企业自身,由企业自己的数据源提供。

数据内容不同

互联网搜索引擎抓取的数据,主要是各个网站公开的各种网页、图片、音频、视频、文档等;而企业搜素处理的数据主要是企业内部提供的私有信息,如产品信息、项目信息、内部文档、办公软件、邮件、数据库等等。同时,企业搜索也可以包括公开的各种数据。

数据更新频率不同

互联网搜索抓取数据是爬虫被动执行的,抓取到新的数据需要一定的时间,数据更新频率由于各种因素存在不确定性,数据更新可能并不及时;而企业搜索的数据源是企业自主可控的,数据往往是企业主动生成的,数据更新基本是实时的。

数据完整性不同

互联网搜索抓取数据,因为各种因素,比如网站列表无法做到完整、网站 Robots 禁止抓取、法律政策等,无法做到抓取和显示所有数据,用户搜索不到需要的数据是正常现象;而企业搜索的数据都是企业预先设定的,用户搜索的结果应按照设计进行展现,搜索不到本该展示的数据是不可接受的。

面向的用户和需求不同

互联网搜索面向的是大众普通用户,搜素方式方法和搜索结果,一般都不会因个别用户或部分用户的需求而改变;企业搜索面向的是企业内部用户或是企业某项业务的客户,在搜索方式上要尽力贴近用户习惯,在搜索结果上要足够完整和准确,能确切表达业务诉求。

搜索结果的可控性不同

使用互联网搜索的用户,搜索出来的结果不会因用户的不同而不同,搜索结果均以 PageRank 算法为基础进行排序展示,所有用户可搜到的结果基本是一致的;而企业搜索的结果需要根据用户的权限进行控制,不同权限的用户搜索到的结果是不同的,不该对用户显示的结果不能显示;同时,企业搜索的结果需要能够进行显式控制,比如通过排序策略、权重策略等,甚至需要直接处理搜索结果从而控制搜索结果。

Elastic 企业搜索能力介绍

Elasticsearch 是基于 Apache Lucene 的分布式搜索引擎,本身就具有全文检索、多用户、近实时,可用于搜索各种文档的能力。而 Elastic 秉承让产品更易于使用的理念,在 Elastic Stack 7.2 中引入了 Elastic App Search,在 Elastic Stack 7.7 中推出 Elastic Workspace Search 正式版,并将 Elastic App Search 、 Elastic Workspace Search,Site Search 打包成了单独的解决方案,其名称就叫 Elastic Enterprise Search,也就是 Elastic 企业搜索。App Search 、Workspace Search、Site Search 基本覆盖了企业的所有搜索应用场景。

App Search 针对企业产品应用搜索场景,在 Elasticserach 强大的存储和分析功能之上,提供经过优化的 API、直观的仪表板、易用可调的相关控件以及可快速集成的客户端。

ElasticStack核心应用场景企业搜索介绍

App Search 系统架构图

Workspace Search 针对企业内部办公搜索场景,提供无缝连接办公协作效率工具向导和 API,借助 Elasticsearch 构建集中信息源,对分散在各个办公软件中的信息和文档,设置自动同步并进行再组织和定制,解决团队协同办公过程中的信息孤岛问题。常见的办公软件如Salesforce,Dropbox, Google docs, Sharepoint, Jira, Confluence 等都提供了友好的接入向导,当然也可以使用自定义源接入其他的系统。Workspace Search 可针对每名团队成员进行权限控制、相关性配置、个性化结果定制等,在安全可控的范围内,帮助团队提高获取信息的速度、完整性并提高信息利用率。

ElasticStack核心应用场景企业搜索介绍

Workspace Search 自带搜索界面展示图

Site Search 的核心是网页爬虫,是一套帮助企业快速构建网站搜索功能的工具。只要输入网址,爬虫就可以自动采集内容并自行定期更新,也支持用户手动对特定页面或者整个网站重新索引。Site Search可以通过自动更正、双连词匹配、词干提取、同义词等功能,提供复杂查询的支撑;也可以通过直观的界面快速调整页面排名、增减权重和同义词等。

虽然 App Search 、Workspace Search、Site Search 针对的应用场景有所不同,但都是企业搜索场景,并且相关支撑能力也是通用的或者类似的。下面我们就通过了解 Elastic Enterprise Search 解决方案来理解Elastic企业搜索能力。

快速部署能力

Elastic Enterprise Search 支持四种部署方式,分别是 Elastic 云实例、Elastic 云上 Kubernetes 集群部署、Linux/MacOS 包部署和 Docker 容器镜像部署。四种部署方式都非常简单快速,相对来说,Elastic 云实例门槛最低而功能最丰富,支持14天免费试用,适合快速学习了解产品功能;而 Linux/MacOS 包部署相对复杂一些,适合熟悉操作系统和想了解安装部署细节配置的用户;如果不想使用云服务也不想一步步下载和配置安装包,那么使用 Docker 部署是一个好的选择。

统一认证能力

Elastic App Search 和 Elastic Workspace Search 支持标准的用户名密码模式、Elasticsearch 本地域模式和 Elasticsearch SAML 第三方统一认证模式进行登陆认证和角色授权。其中标准用户名密码模式,由管理员在 Elastic App Search 或 Elastic Workspace Search 的面板上对用户进行管理;Elasticsearch 本地域模式 Elasticsearch Native Realm 由 Elasticsearch 直接管理和存储用户信息;Elasticsearch SAML 模式是 Elasticsearch 使用第三方统一认证进行用户的登陆认证,而 Elastic App Search 和 Elastic Workspace Search 直接继承了 Elasticearch 中的 SAML 配置。

角色授权能力

不管使用哪种登陆认证模式,Elastic 企业搜索均支持按角色授权,不过针对每种认证模式,授权的方式略有区别。在标准的用户名密码认证模式下,Elastic App Search 使用基于角色的访问控制 (Role Based Access Control) 对用户进行授权,可授权的角色有:Owner、Admin、Dev、Editor、Analyst 等;而 Elastic Workspace 是基于数据内容权限、用户所在部门等因素对用户进行分组,然后对分组进行授权,是基于用户组的访问控制对用户进行授权。在 Elasticsearch Native Realm 和 Elasticsearch SAML 认证模式下,Elastic App Search 和 Elastic Workspace Search 都使用角色映射对用户进行授权,先在 Elasticsearch 中创建角色,然后在 Elastic App Search 和 Elastic Workspace Search 中对 Elasticsearch 中创建的角色进行映射。Elastic App Search 中可映射的角色有:Owner、Admin、Dev、Editor、Analyst等,Elastic Workspace Search 中可映射的角色有:Admin、User。

支持不同级别的内容源

Workspace Search 可以采集各种来源的数据内容,支持使用自定义 API 接入,同时针对GitHub、Jira、Confluence、Google Driver、OneDriver、SharePoint Online、Gmail、Slack 等十几种常见办公应用,提供了方便进行接入的数据采集向导。另外,Workspace Search 支持 Organization Content Sources 组织内容源和 Private Content Sources 私有内容源,也支持 Standard Content Sources 标准内容源和 Standard Content Sources 远程内容源。组织内容源一般由管理员配置,供整个组织使用;而私有内容源可由个别用户自己配置并仅供自己使用。标准内容源中的所有源数据都将被进行采集并存储;而远程内容源仅采集部分信息,依赖数据源的搜索端点进行数据检索。因为标准内容源采集的是全量数据,如果有多个用户对同一个内容源建立了多个数据连接,那么数据就会被采集并存储多份,对 Elasticsearch 的存储容量影响很大;而远程数据源因为采集的数据非常少,在相同情况下,对 Elasticsearch 的影响非常小。当然,建立可检索的远程内容源有个前提条件,就是远程内容源本身是有检索端点的。

ElasticStack核心应用场景企业搜索介绍

Site Search 的网页爬虫,只要输入网址,爬虫就可以自动采集内容并自行定期更新,并且支持用户手动对特定页面或者整个网站重新索引。

支持文档级别权限

Workspace Search 支持启用源文档权限同步,支持的应用包括:Jira Cloud、Confluence Cloud、Google Driver、OneDriver、SharePoint Online 等。其他自定义接入的内容源也可以使用 _allow_permissions 和 _deny_permissions fields 字段来配置文档级别权限。如下代码为文档配置权限:

{
   "_allow_permissions":[
      "permission1"
   ],
   "_deny_permissions":[
      
   ],
   "id":1235,
   "title":"The Meaning of Sleep",
   "body":"Rest, recharge, and connect to the Ether.",
   "url":"https://example.com",
   "created_at":"2019-06-01T12:00:00+00:00",
   "type":"list"
}      

如下代码为用户分配权限:

curl -X POST \
http://localhost:3002/api/ws/v1/sources/[CONTENT_SOURCE_ID]/permissions/[USER_NAME] \
-H "Authorization: Bearer [ACCESS_TOKEN]" \
-H 'Content-Type: application/json' \
    -d '{
   "permissions":[
      "permission1"
   ]
}'      

支持 Meta Engine

App Search 支持 Meta Engine。Meta Engine 本身不存储文档,是将多个源文档引擎进行结合,让用户可以通过搜索单个元引擎,搜索到多个源文档引擎中的内容。

支持自定义搜索体验

在 Workspace Search 搜索栏中输入关键字即可搜索,也可以将 Workspace Search 加入到浏览器搜索引擎中,用户在浏览器地址栏输入关键字即可搜索,搜索体验就像在浏览器中使用 Google 或者百度一样。

ElasticStack核心应用场景企业搜索介绍

用户很容易查看可搜索的内容源、最新内容,也可以按日期检索内容。

ElasticStack核心应用场景企业搜索介绍

用户可以按自己的需求,在搜索时设置搜索字段、结果字段、字段权重、字段值权重、过滤、排序、分页、构面、高亮显示等。

如下代码设置返回第一页,每页一条内容:

curl -X POST http://localhost:3002/api/ws/v1/search \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"query": "denali",
"page": {
"size": 1,
"current": 1
}
}'      

如下代码设置按 square_km 逆序,date_established 顺序排序:

curl -X POST http://localhost:3002/api/ws/v1/search \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"query": "denali",
"sort": [
{ "square_km": "desc" },
{ "date_established": "asc" }
]
}'      

如下代码设置在字段 Title 和 Description 中搜素,Title 的权重为10:

curl -X POST http://localhost:3002/api/ws/v1/search \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"query": "denali",
"search_fields": {
"title": {
"weight": 10
},
"description": {}
}
}'      

如下代码根据字段 world_heritage_site 的值设置权重,当字段值为 true 时权重为 10:

curl -X GET 'https://[instance id].ent-search.[region].[provider].cloud.es.io/api/as/v1/engines/national-parks-demo/search' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer search-soaewu2ye6uc45dr8mcd54v8' \
-d '{
"query": "old growth",
"boosts": {
    "world_heritage_site": [
    {
        "type": "value",
        "value": "true",
        "operation": "multiply",
        "factor": 10
    }
    ]
}
}      

App Search 支持对查询进行加 tag 并按 tag 进行过滤查询:

curl -X GET 'https://[instance id].ent-search.[region].[provider].cloud.es.io/api/as/v1/engines/national-parks-demo/search' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer search-soaewu2ye6uc45dr8mcd54v8' \
-d '{
"query": "everglade",
"analytics": {
    "tags": [
    "i-am-a-tag"
    ]
}
}'      
curl -X GET 'https://[instance id].ent-search.[region].[provider].cloud.es.io/api/as/v1/engines/national-parks-demo/analytics/queries' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer private-namt1hkv7ttsawuo452sxi6s' \
-d '{
"filters": { "tag": "i-am-a-tag" }
}'      

支持对查询结果的控制

App Search 支持对查询结果直接进行控制,如下图,点击星号或者直接拖动结果可重新对查询结果进行排序,点击眼睛图标可隐藏查询结果。当然,所有操作也都是可以使用 API 进行设定,详情见 Curations API。

ElasticStack核心应用场景企业搜索介绍

支持查询优化

App Search 创建引擎时可选择语言,App Search 会针对不同的语言自动进行优化,优化内容包括词干匹配、字符匹配、短语匹配、排版容忍度等。App Search 支持查询关键字推荐/自动完成功能。当用户输入部分关键字时,App Search 可根据引擎中已有的数据,推荐关键词,用户通过选用更合适的关键字,获取更精准的搜索结果。如下代码根据文档中 Title 和 States 字段内容提供 Car 关键词的推荐关键词:

curl -X POST 'https://[instance id].ent-search.[region].[provider].cloud.es.io/api/as/v1/engines/national-parks-demo/query_suggestion' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer search-7eud55t7ecdmqzcanjsc9cqu' \
-d '{
"query": "car",
"types": {
    "documents": {
        "fields": [
        "title",
        "states"
        ]
    }
},
"size": 3
}'      

结果提供 3 个推荐关键词为:carlsbad、carlsbad caverns、carolina

{
   "results":{
      "documents":[
         {
            "suggestion":"carlsbad"
         },
         {
            "suggestion":"carlsbad caverns"
         },
         {
            "suggestion":"carolina"
         }
      ]
   },
   "meta":{
      "request_id":"914f909793379ed5af9379b4401f19be"
   }
}      

App Search 支持同义词配置,可通过设置同义词,使用同义词查询得到需要的结果。如下代码将 summit、peak、cliff、moutain 设置为同义词:

curl -X POST 'https://[instance id].ent-search.[region].[provider].cloud.es.io/api/as/v1/engines/national-parks-demo/synonyms' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer private-xxxxxxxxxxxxxxxxxxxx' \
-d '{
"synonyms": ["summit", "peak", "cliff", "mountain"]
}      

Enterprise Search 支持记录查询分析日志 API Log,方便对用户搜索情况,如搜索结果、搜素性能、搜索异常等进行分析和优化,不断改善用户搜素体验,形成正向反馈。

支持代码集成

Enterprise Search 提供了 Enterprise Search Python Client 和 Enterprise Search Ruby Client,可比较方便的使用 Python 和 Ruby 代码对 Enterprise Search 进行集成。

提供搜索框UI

Elastic 企业搜索提供了连接 App Search 的 React 用户搜索交互界面,直接下载导入即可使用,省去了不少前端代码工作量,对有搜索框需求,但无特别要求的前端应用来说也是一个不错的选择。Site Search则只需要用户在自己的网站上实施几行代码即可添加好由 Elasticsearch 提供支持的搜索框。

总结

企业搜索的业务场景决定了企业搜索的特点和需求,Elastic 在 Elasticsearch 强大功能的基础之上,构建了更加易用的企业搜索解决方案 Elastic Enterprise Search。Elastic Enterprise Search 针对企业搜索场景,提供了从自身部署到权限控制、从文档接入到查询优化、从前端 UI 到结果控制的全场景覆盖的支持能力,虽然其相比自己构建一套企业搜索系统的门槛已非常低,易用性也非常好,但毕竟是一套接口完善、功能众多、相对复杂的系统。以上内容仅简单介绍其基本能力,如需将其应用于生产环境,还需结合实际业务需求,仔细阅读相关文档并进行深入研究和实践。