2017 年 2 月

第 32 卷,第 2 期

本文章是由機器翻譯。

資料操作技巧 - Azure 搜尋服務概觀:掌上型逐步指引

Julie Lerman | 2017 年 2 月

Julie Lerman因為我第一次聽過它從 Pablo Castro,我知道 Entity Framework 和 OData 的建立者的其中一個人,我已經了解 Azure 搜尋服務。他目前的 microsoft 工程總監,一直都是 true 改革和 big-time 資料玩家。在上 Azure 搜尋服務是做為啟始專案,在 Microsoft 如何他中型篇文章是有趣的讀取 (bit.ly/2gzVFTQ)。

Azure 搜尋是可讓您使用 Microsoft 的處理和智慧將複雜的搜尋功能新增至您自己的資料的服務。服務會建立從您的資料,讓它可以執行的資料自己 「 複製 」 它自己搜尋索引的搜尋。您可以將 Azure 搜尋服務的更新為您的資料變更索引的程序自動化,而這是更容易,如果您的資料來源是 Azure 資料存放區,例如 DocumentDB。

我發現您更輕鬆地深入了解 Azure 搜尋服務的基本概念,因此我將在本文中,而不是只嘗試說明執行。您可以使用 REST 或.NET 用戶端等其他應用程式開發的程式碼中建立服務和索引。但您也可以設定項目以視覺化方式在 Azure 入口網站中,也就是我一開始的地方 — 建立及查詢的範例資料存放區與 Azure 入口網站中可用的搜尋服務。我將 handhold 您透過此第一探勘和與您分享一些我探索。這個第一個步驟可讓您理解,您便已準備好有提供更進一步鑽研服務功能,並開始使用 REST API 或.NET 用戶端 API 進行互動。

如果您有 MSDN 訂閱,您已經有要跟著做,您可以使用 Azure 訂用帳戶。我們將使用免費的服務,以便不吃掉您信用額度。如果您目前沒有 Azure 訂用帳戶,您可以快速設定在免費試用版azure.com/free

建立新的搜尋服務

選擇 Azure 入口網站中加入新的資源之後, 您會在 [Web + 行動 」 類別中,看到搜尋,雖然我發現最簡單的路徑就是只在搜尋方塊中的搜尋類型。(這是讓中繼,對吧?) 設定服務會要求您提供服務名稱,且這會成為其 URL 的第一個部分。我將使用 thedatafarm,讓我 URL thedatafarm.search.windows.net。如同任何資源,您可以選擇要將此新增到現有的資源群組,或建立一個新。我沒有任何其他關聯到我的服務的資訊,因此,我建立新的資源群組,我命名為 datafarmsearchgroup 在美國東部。設定資源的最後一個位元是資訊的選取的定價層。Azure 搜尋服務具有適合用來測試服務的免費定價層。它允許 10000 份文件、 三個索引和 50 MB 的儲存體,且不進行縮放。允許您設定您的訂閱中的一項免費搜尋服務。請確定您選擇免費層後,按一下 [選取] 按鈕,否則將會預設為標準。如何發現該錯誤有關的猜測。

當您按一下 [建立時,Azure 會驗證您的設定,如果所有項目簽出時,它應該只有幾秒鐘的時間服務的即時。

您現在有一項服務,但您將會搜尋什麼? 我第一輪測試使用 Azure 搜尋服務上我花了很多時間,然後找出如何與我的服務共用該資料及搜尋 search-worthy 的資料集。它很有趣,但是我想在看法,我已經開始使用 Azure 搜尋只為了讓我親手所提供的範例資料集的其中一個。這就是我所要做這裡。

不在資料,而是在索引的資料,執行搜尋和索引的文件的形式。我們關聯式資料庫的人,索引是大約資料表這類的類似資料表中個別資料列於文件時,單一資料單位。因此首先来建立您想要搜尋之資料的索引。資料可能來自各種不同的資源。從其他 Azure 服務中的資料建立索引是最快的路徑,雖然這是最簡單的搜尋相同的訂閱中的服務執行。您可以指向現有的 Azure DocumentDB、 Azure SQL database 或 SQL Server 在 Azure VM。我撰寫這,Azure 資料表儲存體和 Blob 儲存體支援目前正在預覽。Azure 搜尋服務可讓您存取某些預先建立的範例資料。因此,而非開始依序按一下 [新增索引] 選項,請選擇 [匯入資料,也會為您建立的第一個索引。

在 [匯入資料] 分頁中,以顯示**[圖 1**,選擇 [範例,然後 realestate-我們的範例資料。現在當我在撰寫這篇文章,這是唯一的選項,但有更多範例來了。您可以看到圖示這是 Azure SQL Database,因此您將會從關聯式資料建立索引的文件。搜尋會將資料轉換需要編製索引的結構。它是三個步驟。首先,您選取資料來源,然後定義索引,最後,您的資料匯入您的索引。

Azure 搜尋服務已經知道如何連接到儲存在 Azure 中的資料
[圖 1 的 Azure 搜尋服務已經知道如何連接到儲存在 Azure 中的資料

定義索引

選取範例之後,入口網站會顯示一個方格,列出所有您探索範例資料來源中的欄位。這是在您定義您的索引,且在此情況下,服務精靈已預先定義的索引為您的步驟 ([圖 2)。這是微調索引之前匯入資料的唯一機會。重新定義索引,表示重新匯入您的資料,可能不希望出現在實際執行環境。

第一次的幾個資料列的預設值建立索引,從 realestate-我們的範例資料
[圖 2 第幾個資料列的預設值建立索引,從 realestate-我們的範例資料

針對 Azure SQL Database 或 SQL Server 索引可以只有單一資料表或檢視為目標。如果您使用非關聯式資料存放區做為來源,搜尋 comprehends 會儲存在特定文件或 blob 的完整圖形。所以這裡所示是從資料庫中的單一資料表。26 欄位,而且方格可讓您定義如何每個欄位將會影響到在搜尋中,使用 Retrievable、 Filterable、 Sortable、 Facetable 和 Searchable 的選項。因此,您可以看到,搜尋會提供一些彈性超過僅僅輸入搜尋字詞。在方格的資料行來定義欄位中搜尋的使用方式。索引精靈為您選取某些預設值。

您可能不需要能夠搜尋上的所有欄位。比方說,有七個描述欄位、 一個英文和每個其他不同的語言。如果使用這項資源的應用程式將只會由人員魁北克,而且您打算支援只法文和英文的搜尋,您可以刪除其他五個欄位搜尋索引。在網站中,您的欄位上按一下滑鼠右鍵,然後選擇刪除。

定義索引是小看採用的項目,並計劃,但我只是這麼說好了選取項目所做的匯入工具。但是,執行需要一些時間來查看格線,以了解什麼即將定義。例如,請注意,描述欄位是可搜尋和擷取,但不是可篩選或排序。相反地,平方英尺 (sqft) 和價格等簡單、 純量欄位是可排序和篩選的欄位。

使用索引子將資料匯入

現在,已定義索引,您可以繼續並提取資料。索引定義會有深遠的影響如何匯入資料。請記住,資料就會被提取到索引,而不是要套用至資料的索引。這個動作所花的時間量將取決於大小、 結構和資料,因為索引定義的位置。例如,索引七個不同的描述欄位所花的時間比只有兩個索引。

您可能已經不清楚您的資料中的資料來源變更時,會發生什麼事。Azure 搜尋服務具有一些機制來更新索引,在許多情況下可自動化此做為您 Azure 搜尋服務的服務定義的一部分。規則和此變更偵測和資料移動參數視資料來源而有所不同。您可以進一步了解此文件中。

接下來,精靈會要求您建立索引子。索引子是尋檢程式,從資料來源讀取資料,並於其中填入目標索引。它會執行初始編製索引,以及更新根據定義的排程或隨選的索引。因為我選擇的 Azure SQL Database 資料來源,精靈會使用特別定義的索引子,知道如何對 Azure SQL Database 進行編目。每個資源,像是索引子需要名稱。  我已經呼叫地雷 defaultindexer,可能無法最佳作法是在命名,但有此示範完成工作。

當您按一下 [確定] 時,則索引會開始。在入口網站會快顯通知,讓您知道它已啟動,而且您可以查看其進度索引子刀鋒視窗中。我匯入的時間快,因此,我看過的時間,其已完成。在**[圖 3**,我在 thedatafarm 搜尋服務] 分頁中的頁面上向下捲動。如您所見,索引子的方塊會反白顯示,而且我按下的因為索引子刀鋒視窗會開啟到右方時,顯示該 defaultindexer 完成其工作,從資料來源建立 4,959 搜尋文件。

在我的搜尋服務索引子刀鋒視窗中顯示資料匯入的狀態
[圖 3 在我的搜尋服務索引子刀鋒視窗中顯示資料匯入的狀態

簽出可搜尋文件

現在索引可供搜尋。搜尋總管是初步的搜尋,以及測試直接實作前先在程式碼中搜尋的好方法。如果您曾經用過 OData,您可能會發現,方式您快速篩選、 排序和分頁會使用 OData 語法。也可以透過搜尋本身使用其中兩個查詢的語法。預設值的語法就是簡單的語法,另一個是 Lucene 的查詢語法。

第一個搜尋,建議您只需按一下 [搜尋] 按鈕,而不將任何項目放入查詢字串欄位。這會傳回所有資料,雖然它會一次到達 50 的頁面。它是值得一看,因為這是不熟悉之資料來源。它也為您提供了資料結構的方式。

結果會開始以描述此索引的標頭。文件的整個陣列會包裝在 「 值 」 標記和每個文件會開始搜尋分數值,,然後列出每個欄位的值。

結合搜尋 OData 篩選和計數

第二個搜尋,讓我們維持原意純搜尋。查詢字串欄位中輸入 condominium,然後按一下搜尋。請注意 URI 的結尾 i 搜尋 = condominium。

根據預設,Azure 搜尋服務會傳回 50 份文件與分頁的資料一次,但很難看到您在這裡取得。讓我們加入要求計數為 OData 參數。因為您現在使用多個參數,您將需要指定 condominium 是搜尋的一部分。以下是查詢字串︰

$count=true&search=condominium

在結果中,以顯示現在**[圖 4**索引描述後之前列出的第一個值,您可以看到結果的計數是 399 文件。搜尋查詢找到字串 「 condominium 」 每個欄位的索引定義的搜尋,傳回的每個文件計數,然後比對文件這些 399 第 50。如果您捲動至底部,您會看到是要協助您在擷取下一步 50 份文件的 URI。這是您用過與 OData 之前,您可以辨識的模式。

開始時從含有 OData $count 要求; 中的查詢結果集計數是部分結果根
[圖 4 的結果集與 OData $count 要求; 在查詢中的開頭計數是部分結果根

若要搜尋結果] 窗格,請先確定您的游標位在結果中的某處,,然後使用 [瀏覽器尋找命令 (例如 Ctrl + F)。特別的搜尋方塊出現明顯不同於瀏覽器的 [搜尋] 方塊。型別 condominium,然後按一下 [尋找] 結果,您會看到該單字隨即出現在描述和標記的欄位,也可能是在其他格式,但我只探討了一些。

請記住一些欄位已定義為可篩選索引中。將查詢修改成增益集的篩選三臥室清單;換句話說,其中相欄位是三個。篩選器為 OData 參數,且需要錢幣符號前面。以下是新的查詢字串,請使用 OData 語法來篩選︰

$count=true&search=condominium&$filter=beds eq 3

計數會顯示我們下 73 文件。

更進一步探索 Azure 搜尋服務

此時,我開始更佳了解如何我想要定義我的索引,應該會強烈受到您希望應用程式來完成。您可能需要的存取相同的資料存放區,但需要不同的功能或不同的資料,在結果中各種應用程式。使用 Azure 搜尋服務中,您可以建立個別的索引來滿足這些不同的需求,和每個索引有它自己的資料集,因為應用程式將不互相衝突的資源,可能會降低效能。

我要能夠以視覺化方式檢視我在處理使用。啟動我的 Azure 搜尋服務教育透過入口網站,讓我來檢視索引,並將結果視覺化。它也可以讓我測試查詢。我帶狀底下的經驗,我嘗試使用.NET 用戶端,或只執行查詢,直接與其他應用程式中的 Azure 搜尋服務更具信心。我可以使用自己的資料庫或其他範例資料。我已經設好一個實驗是由 Cooper 但博物館,在共用的公用資料集匯入資料bit.ly/2hrOCej。我上傳到 Azure DocumentDB、 的一組 JSON 文件及其物件的資料集,然後建立搜尋服務並從該索引。在此專案中之後, 我發現 Azure 團隊的範例應用程式的其中一個已不存在類似的方向從 Tate 庫快速使用公開可用的資料。您可以在其示範播放bit.ly/2gxoHQL為多個 Azure 搜尋的強大功能,例如多面向導覽使用見證。(facet 是另一個選項來定義索引時設定)。 此範例使用 JavaScript,並與其互動的 Uri,因此會查看在 GitHub 上的程式碼直接透過 Azure 搜尋服務 (bit.ly/2gI1ej9) 不只是教育,但也令人印象深刻的簡單您自己的邏輯可能會因為 Azure 搜尋服務會為您所有繁重的工作檢視。

希望您第一次看看 Azure 搜尋服務,可讓您透過任何初始的恐懼,這很大,令人怯步服務適用於只有進階 Azure 專家。Azure 有擔任硬碟的東西,使您不需要 Azure 搜尋服務是一個很好的範例,因為它會負責新增到您的應用程式的搜尋功能的困難的部分。


Julie Lerman是 Microsoft MVP,.NET 指導和居住在佛蒙特山區的顧問。 您可以找到其資料存取與其他.NET 主題,在使用者群組和世界各地的研討會上呈現。她的部落格網址thedatafarm.com /blog以及 Code First DbContext 版本中的,所有從 O'Reilly Media 是 「 程式設計 Entity framework 」。在 Twitter 上追隨她︰ @julielerman ,請參閱在她 Pluralsight 課程juliel.me/PS 影片

感謝下列 Microsoft 技術專家來檢閱這份文件︰ Pablo Castro
Pablo 是 Microsoft 在 [資料] 群組中的軟體架構設計人員。他目前是工程的 Azure 搜尋服務,全球規模搜尋做為服務的一項產品,在 Azure 雲端平台的一部分總監。