開發與維運

ElasticStack核心應用場景企業搜索介紹

本文收錄至《Elastic Stack 實戰手冊》,歡迎和我一起解鎖開發者共創書籍,系統學習 ElasticsStack。https://developer.aliyun.com/topic/elasticstack/playbook

image.png

什麼是企業搜索

企業搜索,顧名思義,就是企業使用的搜索服務或者說是企業提供的搜索服務。具體可以是企業的客戶,使用企業提供的搜索服務,搜索企業提供的產品、服務等信;比如電商企業提供搜索服務供客戶搜索商品信息、應用市場提供搜素服務供用戶查找 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、直觀的儀表板、易用可調的相關控件以及可快速集成的客戶端。

image.png

App Search 系統架構圖

Workspace Search 針對企業內部辦公搜索場景,提供無縫連接辦公協作效率工具嚮導和 API,藉助 Elasticsearch 構建集中信息源,對分散在各個辦公軟件中的信息和文檔,設置自動同步並進行再組織和定製,解決團隊協同辦公過程中的信息孤島問題。常見的辦公軟件如Salesforce,Dropbox, Google docs, Sharepoint, Jira, Confluence 等都提供了友好的接入嚮導,當然也可以使用自定義源接入其他的系統。Workspace Search 可針對每名團隊成員進行權限控制、相關性配置、個性化結果定製等,在安全可控的範圍內,幫助團隊提高獲取信息的速度、完整性並提高信息利用率。

image.png

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 的影響非常小。當然,建立可檢索的遠程內容源有個前提條件,就是遠程內容源本身是有檢索端點的。

image.png

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 或者百度一樣。

image.png

用戶很容易查看可搜索的內容源、最新內容,也可以按日期檢索內容。

image.png

用戶可以按自己的需求,在搜索時設置搜索字段、結果字段、字段權重、字段值權重、過濾、排序、分頁、構面、高亮顯示等。

如下代碼設置返回第一頁,每頁一條內容:

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。

image.png

支持查詢優化

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

Leave a Reply

Your email address will not be published. Required fields are marked *