本文收錄至《Elastic Stack 實戰手冊》,歡迎和我一起解鎖開發者共創書籍,系統學習 ElasticsStack。 https://developer.aliyun.com/topic/elasticstack/playbook
什麼是企業搜尋
企業搜尋,顧名思義,就是企業使用的搜尋服務或者說是企業提供的搜尋服務。具體可以是企業的客戶,使用企業提供的搜尋服務,搜尋企業提供的産品、服務等信;比如電商企業提供搜尋服務供客戶搜尋商品資訊、應用市場提供搜素服務供使用者查找 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、直覺的儀表闆、易用可調的相關控件以及可快速內建的用戶端。
App Search 系統架構圖
Workspace Search 針對企業内部辦公搜尋場景,提供無縫連接配接辦公協作效率工具向導和 API,借助 Elasticsearch 建構集中資訊源,對分散在各個辦公軟體中的資訊和文檔,設定自動同步并進行再組織和定制,解決團隊協同辦公過程中的資訊孤島問題。常見的辦公軟體如Salesforce,Dropbox, Google docs, Sharepoint, Jira, Confluence 等都提供了友好的接入向導,當然也可以使用自定義源接入其他的系統。Workspace Search 可針對每名團隊成員進行權限控制、相關性配置、個性化結果定制等,在安全可控的範圍内,幫助團隊提高擷取資訊的速度、完整性并提高資訊使用率。
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 的影響非常小。當然,建立可檢索的遠端内容源有個前提條件,就是遠端内容源本身是有檢索端點的。
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 或者百度一樣。
使用者很容易檢視可搜尋的内容源、最新内容,也可以按日期檢索内容。
使用者可以按自己的需求,在搜尋時設定搜尋字段、結果字段、字段權重、字段值權重、過濾、排序、分頁、構面、高亮顯示等。
如下代碼設定傳回第一頁,每頁一條内容:
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。
支援查詢優化
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 到結果控制的全場景覆寫的支援能力,雖然其相比自己建構一套企業搜尋系統的門檻已非常低,易用性也非常好,但畢竟是一套接口完善、功能衆多、相對複雜的系統。以上内容僅簡單介紹其基本能力,如需将其應用于生産環境,還需結合實際業務需求,仔細閱讀相關文檔并進行深入研究和實踐。