🚀 免費嘗試 Zilliz Cloud,完全托管的 Milvus,體驗速度提升 10 倍!立即嘗試

milvus-logo
LFAI
主頁
  • 使用者指南
  • Home
  • Docs
  • 使用者指南

  • 索引

  • 標量索引

  • 位圖索引

位圖索引

位圖索引是一種有效率的索引技術,設計用來改善低卡片性標量欄位的查詢效能。Cardinality 指的是欄位中不同值的數量。具有較少不同元素的欄位被視為低卡片性。

此索引類型以精簡的二進位格式表示欄位值,並對其執行有效的位運算,有助於縮短標量值查詢的檢索時間。與其他類型的索引相比,位元圖索引在處理低心數欄位時,通常具有更高的空間效率和更快的查詢速度。

概述

Bitmap 一詞由兩個字組合而成:BitMap。位元代表電腦中最小的資料單位,只能容納01 的值。在此上下文中,映射是指根據 0 和 1 應該被指定什麼值來轉換和組織資料的過程。

位圖索引由兩個主要部分組成:位圖和鍵。鍵代表索引欄位中的唯一值。每個唯一值都有一個對應的位元圖。這些位元圖的長度等於集合中記錄的數量。位圖中的每個位元對應集合中的一筆記錄。如果記錄中索引欄位的值與關鍵相符,對應的位就會被設定為1;否則就會被設為0

考慮一個具有CategoryPublic 欄位的文件集合。我們要擷取屬於Tech類別且開放給Public 的文件。在這種情況下,我們的位圖索引的鍵是TechPublic

Bitmap indexing 位圖索引

如圖所示,CategoryPublic的位圖索引為

  • Tech:[1, 0, 1, 0, 0],這表示只有第 1 和第 3 個文件屬於Tech類別。

  • Public:[1, 0, 0, 1, 0],表示只有第 1 和第 4 個文件對公眾開放。

為了找出符合這兩個條件的文件,我們在這兩個位元圖上執行位相 AND 運算。

  • TechANDPublic:[1, 0, 0, 0, 0]

結果位圖 [1, 0, 0, 0, 0] 表示只有第一個文件(ID 1) 符合這兩個條件。透過使用位元圖索引和有效率的位元運算,我們可以快速縮小搜尋範圍,而不需要掃描整個資料集。

建立位圖索引

要在 Milvus 中建立位圖索引,請使用create_index() 方法,並將index_type 參數設定為"BITMAP"

from pymilvus import MilvusClient

index_params = client.create_index_params() # Prepare an empty IndexParams object, without having to specify any index parameters
index_params.add_index(
    field_name="category", # Name of the scalar field to be indexed
    index_type="BITMAP", # Type of index to be created
    index_name="category_bitmap_index" # Name of the index to be created
)

client.create_index(
    collection_name="my_collection", # Specify the collection name
    index_params=index_params
)

在這個範例中,我們在my_collection 資料集中的category 欄位上建立位圖索引。add_index() 方法用來指定欄位名稱、索引類型和索引名稱。

一旦建立位圖索引,您就可以在查詢作業中使用filter 參數,根據索引欄位執行標量篩選。這可讓您使用位圖索引有效地縮窄搜尋結果的範圍。如需詳細資訊,請參閱元資料篩選

限制

  • 位圖索引只支援非主鍵的標量欄位。

  • 欄位的資料類型必須是下列其中之一。

    • BOOL,INT8,INT16,INT32,INT64,VARCHAR

    • ARRAY (元素必須是下列其中之一: , , , , , )BOOL INT8 INT16 INT32 INT64 VARCHAR

  • 位圖索引不支援下列資料類型。

    • FLOAT,DOUBLE: 浮點類型與位圖索引的二進位性質不相容。

    • JSON:JSON 資料類型具有複雜的結構,無法使用位圖索引有效地表示。

  • 位圖索引不適用於高 cardinality 的欄位(即有大量不同值的欄位)。

    • 一般而言,當欄位的 cardinality 小於 500 時,位圖索引最為有效。

    • 當卡片性增加到超過這個臨界值時,位圖索引的效能優勢就會減弱,而且儲存開銷也會變得很大。

    • 對於高卡片數的欄位,請考慮使用其他索引技術,例如倒轉索引,這取決於您的特定使用個案和查詢需求。

免費嘗試托管的 Milvus

Zilliz Cloud 無縫接入,由 Milvus 提供動力,速度提升 10 倍。

開始使用
反饋

這個頁面有幫助嗎?