天天看點

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 到結果控制的全場景覆寫的支援能力,雖然其相比自己建構一套企業搜尋系統的門檻已非常低,易用性也非常好,但畢竟是一套接口完善、功能衆多、相對複雜的系統。以上内容僅簡單介紹其基本能力,如需将其應用于生産環境,還需結合實際業務需求,仔細閱讀相關文檔并進行深入研究和實踐。