管理檔案資源

檔案資源是伺服器註冊的外部辭典檔案參考,文字分析器在執行時會使用這個參考。在 Milvus 3.0 中,有四個分析器元件可以從檔案資源載入字典,而不是從內嵌陣列載入:

分析器元件

接受檔案資源的參數

Jieba tokenizer

extra_dict_file

停止篩選器

stop_words_file

分解篩選器

word_list_file

同義詞篩選器

synonyms_file

檔案資源解決了內嵌字典陣列的兩個實際問題:

  • 真實的詞典是很大的。一個中文傑巴詞彙可能有數萬行;同義詞表通常有數以千計的規則。將它們內嵌到分析器配置中是不切實際的。

  • 相同的字典通常會在不同的集合中共用。先註冊一次,然後以名稱來參照它,可以讓模式保持在較小的範圍內,並且讓字典更新成為單一的操作。

檔案資源類型

Milvus 支援兩種具有不同管理責任的檔案資源類型:

類型

檔案所在位置

誰管理檔案

適合

遠端

在您的 Milvus 叢集已設定使用的物件儲存空間 (MinIO / S3 / GCS / Azure) 中

Milvus,透過add_file_resource /remove_file_resource /list_file_resources 客戶端 API

建議用於大多數部署。

本機

在每個 Milvus 元件(DataNode、QueryNode、StreamingNode)的本機檔案系統上的相同絕對路徑。

您 - 自行掛載檔案,例如透過 Kubernetes 卷冊

開放原始碼/自我託管的情境,您偏好在 Milvus 外部管理字典檔案。

本頁其餘的內容會介紹這兩種類型,從較常見的遠端類型開始。

先決條件

  • 對於遠端檔案資源,您的 Milvus 部署必須配置物件儲存。大多數的部署已經是這樣了 - 檢查milvus.yamlminio: 區段 (或相對應的 Helm 圖表值)。請注意bucketNamerootPath 值;註冊檔案資源時會用到它們。

  • 對於本機檔案資源,您必須能夠以相同的絕對路徑在每個 Milvus pod / 容器上放置檔案。如何做到這一點取決於您的部署(綁定掛載、ConfigMap 支持的卷、init 容器等)。

註冊遠端檔案資源

註冊遠端檔案資源是一個三步驟的工作流程:上傳檔案到物件儲存空間、以選定的名稱在 Milvus註冊它,然後從任何需要它的分析器引用它。

步驟 1.將字典檔案上傳到物件儲存空間

使用您自己的工具 (mc,aws s3 cp,boto3, 或任何 S3 相容的用戶端 ) 將檔案放入 Milvus 設定使用的資料桶。

例如,如果milvus.yaml 包含:

minio:
  bucketName: milvus-bucket
  rootPath: file

上傳名為chinese_terms.txt 並以rootPath 為前綴的檔案,會將該物件置於s3://milvus-bucket/file/chinese_terms.txt

您在步驟 2 中傳給add_file_resourcepath 參數是完整的物件金鑰,包括 rootPath 前綴- 對於上面的範例,path="file/chinese_terms.txt" 。沒有前綴的路徑 (例如,只有"chinese_terms.txt") 會被拒絕,並顯示錯誤file resource path not exist

步驟 2.註冊檔案add_file_resource

from pymilvus import MilvusClient

client = MilvusClient(uri="http://localhost:19530")

client.add_file_resource(
    name="chinese_terms",                # short, unique name you'll reference later
    path="file/chinese_terms.txt",       # full S3 object key, including the rootPath prefix
)

add_file_resource 同步驗證:只有在 Milvus 確認物件存在於設定的物件儲存空間path 之後,呼叫才會回傳。如果物件遺失,呼叫會產生MilvusException(code=65535, "file resource path not exist") - 先上傳檔案,然後再重試。

該呼叫是惰性的。使用相同的namepath 來呼叫add_file_resource 兩次不會產生重複。

步驟 3.從分析器引用檔案資源

只要分析器參數接受檔案參考 (extra_dict_file,stop_words_file,word_list_file,synonyms_file),就使用典型的遠端形式:

{
    "type": "remote",
    "resource_name": "chinese_terms",    # must match the name in add_file_resource
    "file_name": "chinese_terms.txt",    # filename only — Milvus uses this to identify the file inside the resource
}

所有四個分析器參數使用相同的形狀;只有周圍的分析器關鍵不同。有關每個分析器的具體範例,請參閱 Jieba tokenizer、Stop filter、Decompounder filter 及 Synonym filter。

參數名稱是resource_namefile_name - 不是namefile 。使用name /file (或"type": "resource" 而非"type": "remote") 會在分析器建立時產生MilvusException ,並帶有類似resource name of remote file ... must be set 的訊息。

列出檔案資源

resources = client.list_file_resources()
for r in resources:
    print(r.name, r.path)
# chinese_terms file/chinese_terms.txt

list_file_resources() 返回FileResourceInfo 对象的列表,每个对象都有.name.path 属性。空簇返回[] 。沒有每個資源的getlist_file_resources 是唯一的讀取 API。

移除檔案資源

client.remove_file_resource(name="chinese_terms")

remove_file_resource 是idempotent:為一個不存在的名稱呼叫它會返回None ,而不會升級。

在移除檔案資源之前,請刪除或變更其分析器配置引用它的任何集合。保留檔案資源直到沒有集合依賴它,可以避免資源消失後分析器查詢失敗的風險。

使用本機檔案資源

本機檔案資源直接指向每個 Milvus 元件本機檔案系統上的路徑。沒有add_file_resource 呼叫 - Milvus 不跟蹤本機資源。您自己將檔案放置在每個相關 pod 或容器上的相同絕對路徑,然後透過路徑引用它:

{
    "type": "local",
    "path": "/var/lib/milvus/dicts/chinese_terms.txt",
}

本地檔案資源僅在您控制 DataNodes、QueryNodes 和 StreamingNodes 檔案系統的部署中有效 - 通常是裸機上的自託管 Milvus 或 Kubernetes 叢集上的自託管 Milvus,您可以在其中新增卷掛載。檔案必須以完全相同的絕對路徑存在於每個元件上;否則,某些節點在載入分析器時會失敗。

檔案會在分析器首次建立時開啟。如果該路徑當時不存在,則分析器的建立會以MilvusException(code=2000, "IOError: No such file or directory") 失敗。

注意事項

  • 叢集範圍內的可用性不是即時的。 add_file_resource 返回後,Milvus 會同步檔案到需要它的每個元件。在這個短暫的視窗中,引用資源的集合可能會在尚未同步的節點上建立失敗。典型的解決方法是在幾秒鐘後重試建立呼叫。

  • 僅當沒有集合依賴於資源時才移除。在呼叫remove_file_resource 之前,請移除或變更分析器設定引用該資源的任何集合,以避免分析器查詢找不到檔案。

  • list_file_resources() 返回namepath - 沒有大小、校驗和、上傳時間或其他元資料如果需要,請使用自己的命名慣例追蹤字典版本。