Last Updated on 2023-05-24 by Clay
什麼是 Azure 認知搜尋?
Microsoft Azure 認知搜尋(Cognitive Search)是 Azure 中所提供的的 AI 搜尋服務,允許開發人員在雲端應用程式中加入全文搜尋能力。
此服務除了基本的全文搜尋外,還包括許多比較進階的功能,例如
- 過濾
- 排序
- 分頁
- 語義搜尋(限地區,目前為 preview 版本)
更重要的是,Cognitive Search 支援 “cognitive skills”,讓開發者可以應用 AI 技術(例如視覺和自然語言處理)來分析和理解他們的資料。當然,在我測試後發現這其實比較偏向做資料的前處理(preprocessing)。
以下再來詳細地說說這些功能,比方說 Azure Cognitive Search 官方網站所列出的主要功能簡介:
- 全文搜尋:支援多語言和語義搜尋,使用者可以使用簡單的查詢語法進行複雜的搜尋。
- 分析:Cognitive Search 內建許多文本分析器,可以進行自然語言處理任務,例如斷詞、詞性標註、實體識別等。
- Cognitive Skills:這些是預先建立的 AI 模型,可以用來提取和理解資料。例如,有一些 Cognitive Skills 可以分析圖像、提取關鍵字、識別語言等。
- 索引:Cognitive Search 可以對多種類型的資料源建立索引,包括 Azure SQL Database、Azure Cosmos DB、Azure Blob Storage 等。
- 安全性與隱私:Cognitive Search 支援 Azure 的安全和隱私標準,例如使用 SSL 加密連線、身分驗證等。
- 可擴展性與可用性:Cognitive Search 支援橫向擴展,可以根據負載自動調整容量。同時,服務也設計成可以應對硬體故障,確保高可用性。
在應用端,Azure Cognitive Search 廣泛應用於網站搜尋、電子商務平台、文件探索和分析、資訊檢索等場景,提供了靈活且強大的搜尋功能,並結合 AI 的能力進一步提升使用者的搜尋體驗。
雖然現在(2023/05/24)還不支援向量搜尋(vector search),但是在 Microsoft 近日發表的新聞 https://news.microsoft.com/build-2023-book-of-news/ 中,則明確提到了之後會支援。
由於 Azure 上的功能很複雜(雖然就某方面來講是很「齊全」...),所以下面我簡單地說說我們要如何做認知搜尋服務。
- 建立伺服器:要有一個伺服器,我們才能託管服務
- 建立 SQL 資料庫:我們需要建立一個資料庫並儲存我們的資料。並且這個資料庫需要託管在我們剛剛建立的伺服器上
- 建立認知搜尋服務:接著我們要建立一個可以打 API 的服務,來讓我們本地端的程式(比如 Python)進行調用
- 本地端查找雲端的資料:這裡我拿 python 實作
以下是更詳細的流程說明。
建立伺服器
一開始進入 Azure 時,你會看到以下畫面。而我們要做的,首先就是建立一個伺服器。
我們應該要做的就是建立一個 SQL server,你可以依照自己的需求建立。
建立時,會需要填寫:
- 訂閱戶(Subscription)
- 資源群組(Resource group)
- 伺服器名稱(Server name)
- 位置(Location)
要記得,之後要填寫使用者名稱跟密碼時要紀錄起來,因為之後在我們上傳資料時會需要填寫,然後才能成功把資料傳到資料庫中的表。
在這裡,我建立的伺服器名稱就是 claybotserver。
這就是伺服器建立好的樣子。
建立資料庫
接下來就是建立資料庫了。
建立資料庫同樣很單純,選擇自己想要的設定,唯一要注意的就是要把資料庫託管在自己剛剛建立的伺服氣上。
匯入資料
接著就是把我們的資料上傳至資料庫中。
我是參考這個網站的:https://freegistutorial.com/how-to-import-csv-to-sql-server-using-azure-data-studio/
首先,下載 Azure Data Studio:https://learn.microsoft.com/en-us/sql/azure-data-studio/download-azure-data-studio?view=sql-server-ver16&tabs=redhat-install%2Credhat-uninstall
打開後會要求要連線至遠端伺服器,這裡要輸入伺服器的 URI 和使用者名稱、密碼。記得是輸入伺服器的。
並且推薦一個好用的 extension(話說這界面跟功能和 VS Code 真的超像的):SQL Server Import。
接著對你要匯入資料表的資料庫點擊右鍵,選擇 Import wizard。
你會看到以下畫面,前面都可以不動,但是要匯入的文件要記得點選,基本上 csv 跟 json 都可以。
我的資料是測試資料 test.csv:
ID | DATE | VAL |
---|---|---|
0 | 20220522 | 68.2 |
1 | 20220523 | 50.3 |
2 | 20230503 | 77.9 |
這裡可以更改欄位名稱和資料型態之類的設定。
建立索引
接著我們還要做一個情感搜尋(cognitive search)的服務。
老樣子,取名、設定地區… 等等的設定必須完成。
完成之後,從上方的 Import data 選項那邊匯入資料。
透過 Python 進行搜尋
首先,我們自然需要安裝 azure 套件。
pip3 install azure-search-documents
import os
from azure.core.credentials import AzureKeyCredential
from azure.search.documents import SearchClient
index_name = "<YOUR_INDEX>"# Get the service endpoint and API key from the environment
endpoint = "https://<YOUR_SEARCH>.search.windows.net"
key = "<YOUR_KEY>"# Create a client
credential = AzureKeyCredential(key)
search_client = SearchClient(
endpoint=endpoint,
index_name=index_name,
credential=credential,
)
results = search_client.search(search_text="<YOUR_QUERY>")
for result in results:
print(result)
這份程式是可以正常運作的,最困難的部分應該是要把那些 key 啊、endpoint 啊給填寫好...... Azure 在這方面是真的看起來頗複雜。
大家可以試著找找看對應的資料究竟藏在 Azure 的哪裡,我實在很難詳細地全部列出來,更別提涉及組織隱私的部分我還必須打碼...... 安全起見還是不放圖了,不然哪裡漏遮了洩漏公司金鑰什麼的很麻煩的。
如果真的找不到位置,就留言讓我知道,我會想辦法再描述地更清楚點的。不過基本上只要仔細地找跟閱讀官方文件,應該大部分欄位都找得出來。我就是這樣慢慢找出來的。
References
- https://learn.microsoft.com/en-us/azure/search/search-get-started-python
- https://news.microsoft.com/build-2023-book-of-news/
- https://freegistutorial.com/how-to-import-csv-to-sql-server-using-azure-data-studio/