🚀 جرب Zilliz Cloud، الـ Milvus المدارة بالكامل، مجاناً — تجربة أداء أسرع بـ 10 أضعاف! جرب الآن>>

milvus-logo
LFAI
الصفحة الرئيسية
  • دليل المستخدم
  • Home
  • Docs
  • دليل المستخدم

  • الفهارس

  • فهارس المتجهات

  • حقول متجهات الفهرس

فهرسة الحقول المتجهة

يرشدك هذا الدليل إلى العمليات الأساسية لإنشاء الفهارس وإدارتها على الحقول المتجهة في مجموعة.

نظرة عامة

من خلال الاستفادة من البيانات الوصفية المخزنة في ملف الفهرس، ينظم Milvus بياناتك في بنية متخصصة، مما يسهل الاسترجاع السريع للمعلومات المطلوبة أثناء عمليات البحث أو الاستعلامات.

يوفر Milvus العديد من أنواع الفهارس والمقاييس لفرز قيم الحقول لإجراء عمليات بحث فعالة للتشابه. يسرد الجدول التالي أنواع الفهارس والمقاييس المدعومة لأنواع الحقول المتجهة المختلفة. يدعم Milvus حاليًا أنواعًا مختلفة من بيانات المتجهات، بما في ذلك التضمينات ذات النقطة العائمة (المعروفة غالبًا باسم متجهات النقطة العائمة أو المتجهات الكثيفة)، والتضمينات الثنائية (المعروفة أيضًا باسم المتجهات الثنائية)، والتضمينات المتفرقة (المعروفة أيضًا باسم المتجهات المتفرقة). لمزيد من التفاصيل، راجع الفهرس داخل الذاكرة ومقاييس التشابه.

أنواع المقاييس أنواع الفهرس
  • المسافة الإقليدية (L2)
  • الضرب الداخلي (IP)
  • تشابه جيب التمام (COSINE)
  • مسطح
  • IVF_FLAT
  • IVF_SQ8
  • IVF_PQ
  • GPU_IVF_FLAT
  • GPU_IVF_PQ
  • HNSW
  • DISKANN
أنواع المقاييس أنواع الفهرس
  • جاكارد (JACCARD)
  • هامينغ (HAMMING)
  • BIN_FLAT
  • BIN_IVF_FLAT
الأنواع المترية أنواع الفهرس
IP الفهرس_المتفرق_المقلوب_الفهرس

بدءًا من الإصدار Milvus 2.5.4 فصاعدًا، يتم إهمال SPARSE_WAND. بدلاً من ذلك، يوصى باستخدام "inverted_index_algo": "DAAT_WAND" للمعادلة مع الحفاظ على التوافق. لمزيد من المعلومات، ارجع إلى Sparse Vector.

يوصى بإنشاء فهارس لكل من الحقل المتجه والحقول القياسية التي يتم الوصول إليها بشكل متكرر.

الإعدادات

كما هو موضح في إدارة المجموعات، يقوم ميلفوس تلقائيًا بإنشاء فهرس وتحميله في الذاكرة عند إنشاء مجموعة إذا تم تحديد أي من الشروط التالية في طلب إنشاء المجموعة

  • بُعد الحقل المتجه ونوع المقياس، أو

  • المخطط ومعلمات الفهرس.

يقوم مقتطف التعليمات البرمجية أدناه بإعادة استخدام التعليمات البرمجية الحالية لإنشاء اتصال بمثيل Milvus وإنشاء مجموعة دون تحديد معلمات الفهرس الخاصة بها. في هذه الحالة، تفتقر المجموعة إلى فهرس وتبقى غير محملة.

للتحضير للفهرسة، استخدم MilvusClient للاتصال بخادم Milvus وإنشاء مجموعة باستخدام create_schema(), add_field()و create_collection().

للتحضير للفهرسة، استخدم MilvusClientV2 للاتصال بخادم ميلفوس وإعداد مجموعة باستخدام createSchema(), addField()و createCollection().

للتحضير للفهرسة، استخدم MilvusClient للاتصال بخادم ميلفوس وإعداد مجموعة باستخدام createCollection().

from pymilvus import MilvusClient, DataType

# 1. Set up a Milvus client
client = MilvusClient(
    uri="http://localhost:19530"
)

# 2. Create schema
# 2.1. Create schema
schema = MilvusClient.create_schema(
    auto_id=False,
    enable_dynamic_field=True,
)

# 2.2. Add fields to schema
schema.add_field(field_name="id", datatype=DataType.INT64, is_primary=True)
schema.add_field(field_name="vector", datatype=DataType.FLOAT_VECTOR, dim=5)

# 3. Create collection
client.create_collection(
    collection_name="customized_setup", 
    schema=schema, 
)
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.client.MilvusClientV2;
import io.milvus.v2.common.DataType;
import io.milvus.v2.service.collection.request.CreateCollectionReq;

String CLUSTER_ENDPOINT = "http://localhost:19530";

// 1. Connect to Milvus server
ConnectConfig connectConfig = ConnectConfig.builder()
    .uri(CLUSTER_ENDPOINT)
    .build();

MilvusClientV2 client = new MilvusClientV2(connectConfig);

// 2. Create a collection

// 2.1 Create schema
CreateCollectionReq.CollectionSchema schema = client.createSchema();

// 2.2 Add fields to schema
schema.addField(AddFieldReq.builder().fieldName("id").dataType(DataType.Int64).isPrimaryKey(true).autoID(false).build());
schema.addField(AddFieldReq.builder().fieldName("vector").dataType(DataType.FloatVector).dimension(5).build());

// 3 Create a collection without schema and index parameters
CreateCollectionReq customizedSetupReq = CreateCollectionReq.builder()
.collectionName("customized_setup")
.collectionSchema(schema)
.build();

client.createCollection(customizedSetupReq);
// 1. Set up a Milvus Client
client = new MilvusClient({address, token});

// 2. Define fields for the collection
const fields = [
    {
        name: "id",
        data_type: DataType.Int64,
        is_primary_key: true,
        autoID: false
    },
    {
        name: "vector",
        data_type: DataType.FloatVector,
        dim: 5
    },
]

// 3. Create a collection
res = await client.createCollection({
    collection_name: "customized_setup",
    fields: fields,
})

console.log(res.error_code)  

// Output
// 
// Success
// 

فهرسة مجموعة

لإنشاء فهرس لمجموعة أو فهرسة مجموعة، استخدم . prepare_index_params() لإعداد معلمات الفهرس و create_index() لإنشاء الفهرس.

لإنشاء فهرس لمجموعة أو فهرسة مجموعة، استخدم IndexParam لإعداد معلمات الفهرس و createIndex() لإنشاء الفهرس.

لإنشاء فهرس لمجموعة أو فهرسة مجموعة، استخدم createIndex().

# 4.1. Set up the index parameters
index_params = MilvusClient.prepare_index_params()

# 4.2. Add an index on the vector field.
index_params.add_index(
    field_name="vector",
    metric_type="COSINE",
    index_type="IVF_FLAT",
    index_name="vector_index",
    params={ "nlist": 128 }
)

# 4.3. Create an index file
client.create_index(
    collection_name="customized_setup",
    index_params=index_params,
    sync=False # Whether to wait for index creation to complete before returning. Defaults to True.
)
import io.milvus.v2.common.IndexParam;
import io.milvus.v2.service.index.request.CreateIndexReq;

// 4 Prepare index parameters

// 4.2 Add an index for the vector field "vector"
IndexParam indexParamForVectorField = IndexParam.builder()
    .fieldName("vector")
    .indexName("vector_index")
    .indexType(IndexParam.IndexType.IVF_FLAT)
    .metricType(IndexParam.MetricType.COSINE)
    .extraParams(Map.of("nlist", 128))
    .build();

List<IndexParam> indexParams = new ArrayList<>();
indexParams.add(indexParamForVectorField);

// 4.3 Crate an index file
CreateIndexReq createIndexReq = CreateIndexReq.builder()
    .collectionName("customized_setup")
    .indexParams(indexParams)
    .build();

client.createIndex(createIndexReq);
// 4. Set up index for the collection
// 4.1. Set up the index parameters
res = await client.createIndex({
    collection_name: "customized_setup",
    field_name: "vector",
    index_type: "AUTOINDEX",
    metric_type: "COSINE",   
    index_name: "vector_index",
    params: { "nlist": 128 }
})

console.log(res.error_code)

// Output
// 
// Success
// 
المعلمة الوصف
field_name اسم الملف الهدف لتطبيق هذا الكائن.
metric_type الخوارزمية المستخدمة لقياس التشابه بين المتجهات. القيم الممكنة هي IP و L2 و COSINE و JACCARD و HAMMING. يتوفر هذا فقط عندما يكون الحقل المحدد هو حقل متجه. لمزيد من المعلومات، راجع الفهارس المدعومة في ميلفوس.
index_type اسم الخوارزمية المستخدمة لترتيب البيانات في الحقل المحدد. لمعرفة الخوارزميات القابلة للتطبيق، راجع الفهرس داخل الذاكرة والفهرس على القرص.
index_name اسم ملف الفهرس الذي تم إنشاؤه بعد تطبيق هذا الكائن.
params معلمات الضبط الدقيق لنوع الفهرس المحدد. للحصول على تفاصيل حول المفاتيح الممكنة ونطاقات القيم، راجع الفهرس داخل الذاكرة.
collection_name اسم مجموعة موجودة.
index_params كائن IndexParams يحتوي على قائمة من كائنات IndexParam.
sync يتحكم في كيفية بناء الفهرس فيما يتعلق بطلب العميل. قيم صالحة:
  • True (افتراضي): ينتظر العميل حتى يتم بناء الفهرس بالكامل قبل إرجاعه. هذا يعني أنك لن تحصل على استجابة حتى تكتمل العملية.
  • False: يعود العميل فور استلام الطلب ويتم إنشاء الفهرس في الخلفية. لمعرفة ما إذا كان إنشاء الفهرس قد اكتمل، استخدم طريقة describe_index().
المعلمة الوصف
fieldName اسم الحقل المستهدف لتطبيق كائن IndexParam هذا.
indexName اسم ملف الفهرس الذي تم إنشاؤه بعد تطبيق هذا الكائن.
indexType اسم الخوارزمية المستخدمة لترتيب البيانات في الحقل المحدد. لمعرفة الخوارزميات القابلة للتطبيق، راجع الفهرس داخل الذاكرة والفهرس على القرص.
metricType مقياس المسافة المراد استخدامه للفهرس. القيم الممكنة هي IP وL2 وCOSINE وJACCARD وHAMMING.
extraParams معلمات الفهرس الإضافية. لمزيد من التفاصيل، راجع الفهرس داخل الذاكرة والفهرس على القرص.
المعلمة الوصف
collection_name اسم المجموعة الموجودة.
field_name اسم الحقل المراد إنشاء فهرس فيه.
index_type نوع الفهرس المراد إنشاؤه.
metric_type نوع المقياس المستخدم لقياس المسافة المتجهة.
index_name اسم الفهرس المراد إنشاؤه.
params معلمات أخرى خاصة بالفهرس.

ملاحظات

يمكنك حالياً إنشاء ملف فهرس واحد فقط لكل حقل في مجموعة.

التحقق من تفاصيل الفهرس

بمجرد إنشاء فهرس، يمكنك التحقق من تفاصيله.

للتحقق من تفاصيل الفهرس، استخدم list_indexes() لسرد أسماء الفهرس و describe_index() للحصول على تفاصيل الفهرس.

للتحقق من تفاصيل الفهرس، استخدم describeIndex() للحصول على تفاصيل الفهرس.

للتحقق من تفاصيل الفهرس، استخدم describeIndex() للحصول على تفاصيل الفهرس.

# 5. Describe index
res = client.list_indexes(
    collection_name="customized_setup"
)

print(res)

# Output
#
# [
#     "vector_index",
# ]

res = client.describe_index(
    collection_name="customized_setup",
    index_name="vector_index"
)

print(res)

# Output
#
# {
#     "index_type": ,
#     "metric_type": "COSINE",
#     "field_name": "vector",
#     "index_name": "vector_index"
# }
import io.milvus.v2.service.index.request.DescribeIndexReq;
import io.milvus.v2.service.index.response.DescribeIndexResp;

// 5. Describe index
// 5.1 List the index names
ListIndexesReq listIndexesReq = ListIndexesReq.builder()
    .collectionName("customized_setup")
    .build();

List<String> indexNames = client.listIndexes(listIndexesReq);

System.out.println(indexNames);

// Output:
// [
//     "vector_index"
// ]

// 5.2 Describe an index
DescribeIndexReq describeIndexReq = DescribeIndexReq.builder()
    .collectionName("customized_setup")
    .indexName("vector_index")
    .build();

DescribeIndexResp describeIndexResp = client.describeIndex(describeIndexReq);

System.out.println(JSONObject.toJSON(describeIndexResp));

// Output:
// {
//     "metricType": "COSINE",
//     "indexType": "AUTOINDEX",
//     "fieldName": "vector",
//     "indexName": "vector_index"
// }
// 5. Describe the index
res = await client.describeIndex({
    collection_name: "customized_setup",
    index_name: "vector_index"
})

console.log(JSON.stringify(res.index_descriptions, null, 2))

// Output
// 
// [
//   {
//     "params": [
//       {
//         "key": "index_type",
//         "value": "AUTOINDEX"
//       },
//       {
//         "key": "metric_type",
//         "value": "COSINE"
//       }
//     ],
//     "index_name": "vector_index",
//     "indexID": "449007919953063141",
//     "field_name": "vector",
//     "indexed_rows": "0",
//     "total_rows": "0",
//     "state": "Finished",
//     "index_state_fail_reason": "",
//     "pending_index_rows": "0"
//   }
// ]
// 

يمكنك التحقق من ملف الفهرس الذي تم إنشاؤه على حقل معين، وجمع إحصائيات عدد الصفوف المفهرسة باستخدام ملف الفهرس هذا.

إسقاط فهرس

يمكنك ببساطة إسقاط فهرس إذا لم تعد هناك حاجة إليه.

قبل إسقاط فهرس، تأكد أولاً من إصداره.

لإسقاط فهرس، استخدم drop_index().

لإسقاط فهرس، استخدم . dropIndex().

لإسقاط فهرس، استخدم . dropIndex().

# 6. Drop index
client.drop_index(
    collection_name="customized_setup",
    index_name="vector_index"
)
// 6. Drop index

DropIndexReq dropIndexReq = DropIndexReq.builder()
    .collectionName("customized_setup")
    .indexName("vector_index")
    .build();

client.dropIndex(dropIndexReq);
// 6. Drop the index
res = await client.dropIndex({
    collection_name: "customized_setup",
    index_name: "vector_index"
})

console.log(res.error_code)

// Output
// 
// Success
// 

جرب Managed Milvus مجاناً

Zilliz Cloud خالي من المتاعب، ويعمل بواسطة Milvus ويعمل بسرعة 10 أضعاف.

ابدأ
التعليقات

هل كانت هذه الصفحة مفيدة؟