2016-12-14

Azure Search - Part 2 (關於 Index)

What is Index?

  1. Index 是Azure Search用來儲存資料(document或是其他結構)的方式;
  2. 概念上 Index 就像是關聯式資料庫中的 Table,Document 則是 DataRow
  3. 定義結構描述時需要指定 Index 中每個欄位的名稱、類型跟屬性

Azure Search Index 的欄位類型

  • 可用來分類欄位的資料
  • 以 Entity Data Model, or EDM 來分類(關於 EDM 可以看 實體資料模型)
欄位類型
類型 Nullable Default 說明
Edm.String Nullable null 可選擇性予以 Token 化以供進行全文檢索搜尋 (斷字、詞幹分析等) 的文字。
Collection(Edm.String) Not Nullable Empty('[]') 可選擇性予以 Token 化以供進行全文檢索搜尋的字串清單。 理論上,集合中的項目數沒有上限,但集合的承載大小有 16 MB 的上限。
Edm.Boolean Nullable null true/false 。
Edm.Int32 Nullable null 32 位元整數值。
Edm.Int64 Nullable null 64 位元整數值。
Edm.Double Nullable null 雙精度數值資料。
Edm.DateTimeOffset Nullable null 以 OData V4 格式 (例如 yyyy-MM-ddTHH:mm:ss.fffZ 或 yyyy-MM-ddTHH:mm:ss.fff[+/-]HH:mm) 表示的日期時間值。
Edm.GeographyPoint Nullable null 地理資訊。
其他類型
類型 說明
Edm.GeographyPolygon 描述地球上的多邊形區域,無法使用在 Document 欄位,可能用來證明 geo.intersects 函數

Azure Search Index 的欄位屬性

可用來指定使用欄位的方式
欄位屬性
屬性 說明
Key 字串,提供每一份文件的唯一識別碼,用於查閱文件。 每個索引必須有一個索引鍵。 只有一個欄位可以做為索引鍵,而且其類型必須設定為 Edm.String。
Retrievable 指定搜尋結果中是否可傳回某欄位。
Filterable 允許欄位用於篩選查詢。
Sortable 允許查詢使用此欄位排序搜尋結果。
Facetable 允許欄位用於使用者自我引導篩選的 多面嚮導覽 結構中。 通常,欄位若包含您可以用來將多份文件群組在一起的重複值 (例如,落在單一品牌或服務類別目錄下的多份文件),最適合做為 Facet。
Searchable 將欄位標記為可供全文檢索。
詳細資料Create Index (Azure Search Service REST API)
中英文內容看起來差異滿大的,都先列上來,至少有問題也比較好查
Index Attributes
Attribute Description
name 欄位名稱
type 欄位的資料類型
searchable 用來標記欄位可用於全文檢索。需要在建立 index 進行斷詞分析.Edm.String or Collection(Edm.String) 預設即是 searchable.其他類型的欄位是無法標記為 searchableNote: searchable 欄位會耗損額外的 index 空間,因為 Azure Search 會需要為全文檢索儲存較多的版本資料.如果想要節省空間或是不需要搜尋該欄位,可以把searchable設成 false.
filterable 將欄位標記成可使用 $filter 查詢. filterablesearchable不同在字串的處理. filterable 中的 Edm.String or Collection(Edm.String) 類型,不需要經過斷詞分析,所以只支援完全符合. 所以欄位預設都是 filterable.
sortable 預設情況下系統會依分數來排序,但使用者會想要依欄位來排序,除了 Collection(Edm.String) 無法 sortable.其他欄位預設皆是 sortable.
facetable 一般用在呈現各類別的內容命中次數.除 Edm.GeographyPoint 無法使用,其他欄位預設都是 facetable. Note: Edm.Stringfilterable, sortable, facetable 長度最長不能超過 32 kb.這是因為 Azure Search 有單一搜尋名詞 32 kb 的限制.如果需要儲存更多文字,就需要手動將 filterable, sortable, facetable 設定成 false . Note: 如果 searchable,filterable, sortable, facetable 沒有一個被設定成 true,代表這個欄位就是未納入 index 中.適合用來設定在需要出現在搜尋結果但不需要是搜尋條件的欄位上.從 index 排除這類的欄位有助提升效能.
key 將欄位標記成 Index 中 documments 的唯一識別子. 只有一個欄位可以被當做 Key,欄位類型必需是Edm.String. Key 欄位可以直接被用來查詢 documents .可以看 Lookup Document (Azure Search Service REST API)
retrievable 設定欄位是否被納入回傳的結果中,key 欄位必需要設成 true.
analzyer 設定要用哪一種語言 analyzer.支援的語言清單可以看 Language support (Azure Search Service REST API).這個選項只能用在 searchable 欄位上,而且不能與 searchAnalyzer or indexAnalyzer 同時使用. 設定後不得更改.
searchAnalyzer 設定在搜尋時要使用哪一種 analyzer.可用的分析可以看 Custom analyzers in Azure Search. 這個選項只能套用在 searchable 欄位.必需與 indexAnalyzer 同時設定但不得與 analyzer 同時設定. 這個 analyzer 以被套用在既有的欄位上。
indexAnalyzer 設定在建立 index 時要使用哪一種 analyzer.可用的分析可以看 Custom analyzers in Azure Search. 這個選項只能套用在 searchable 欄位.必需與 searchAnalyzer 同時設定但不得與 analyzer 同時設定 . 設定後不得更改.

參考資料

1.建立 Azure Search 索引 2.Supported data types (Azure Search) 3.實體資料模型 4.Create Index (Azure Search Service REST API) 5.Lookup Document (Azure Search Service REST API) 6.Language support (Azure Search Service REST API) 7.Custom analyzers in Azure Search

沒有留言:

張貼留言