فهرسة الحقول المتجهة
يرشدك هذا الدليل إلى العمليات الأساسية لإنشاء الفهارس وإدارتها على الحقول المتجهة في مجموعة.
نظرة عامة
من خلال الاستفادة من البيانات الوصفية المخزنة في ملف الفهرس، ينظم Milvus بياناتك في بنية متخصصة، مما يسهل الاسترجاع السريع للمعلومات المطلوبة أثناء عمليات البحث أو الاستعلامات.
يوفر Milvus العديد من أنواع الفهارس والمقاييس لفرز قيم الحقول لإجراء عمليات بحث فعالة للتشابه. يسرد الجدول التالي أنواع الفهارس والمقاييس المدعومة لأنواع الحقول المتجهة المختلفة. يدعم Milvus حاليًا أنواعًا مختلفة من بيانات المتجهات، بما في ذلك التضمينات ذات النقطة العائمة (المعروفة غالبًا باسم متجهات النقطة العائمة أو المتجهات الكثيفة)، والتضمينات الثنائية (المعروفة أيضًا باسم المتجهات الثنائية)، والتضمينات المتفرقة (المعروفة أيضًا باسم المتجهات المتفرقة). لمزيد من التفاصيل، راجع الفهرس داخل الذاكرة ومقاييس التشابه.
أنواع المقاييس | أنواع الفهرس |
---|---|
|
|
أنواع المقاييس | أنواع الفهرس |
---|---|
|
|
الأنواع المترية | أنواع الفهرس |
---|---|
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 |
يتحكم في كيفية بناء الفهرس فيما يتعلق بطلب العميل. قيم صالحة:
|
المعلمة | الوصف |
---|---|
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
//