From 72191f5b13c55b44bcd3b25f7480804259e53495 Mon Sep 17 00:00:00 2001 From: Jyong <76649700+JohnJyong@users.noreply.github.com> Date: Thu, 20 Mar 2025 21:53:49 +0800 Subject: [PATCH] add built-in field check when doing old metadata migrate (#16371) --- api/commands.py | 65 ++++++++++++++++++++++++++----------------------- 1 file changed, 35 insertions(+), 30 deletions(-) diff --git a/api/commands.py b/api/commands.py index 94e7e74e3..e7f54c7cc 100644 --- a/api/commands.py +++ b/api/commands.py @@ -12,6 +12,7 @@ from configs import dify_config from constants.languages import languages from core.rag.datasource.vdb.vector_factory import Vector from core.rag.datasource.vdb.vector_type import VectorType +from core.rag.index_processor.constant.built_in_field import BuiltInField from core.rag.models.document import Document from events.app_event import app_was_created from extensions.ext_database import db @@ -559,36 +560,25 @@ def old_metadata_migration(): if document.doc_metadata: doc_metadata = document.doc_metadata for key, value in doc_metadata.items(): - dataset_metadata = ( - db.session.query(DatasetMetadata) - .filter(DatasetMetadata.dataset_id == document.dataset_id, DatasetMetadata.name == key) - .first() - ) - if not dataset_metadata: - dataset_metadata = DatasetMetadata( - tenant_id=document.tenant_id, - dataset_id=document.dataset_id, - name=key, - type="string", - created_by=document.created_by, - ) - db.session.add(dataset_metadata) - db.session.flush() - dataset_metadata_binding = DatasetMetadataBinding( - tenant_id=document.tenant_id, - dataset_id=document.dataset_id, - metadata_id=dataset_metadata.id, - document_id=document.id, - created_by=document.created_by, - ) - db.session.add(dataset_metadata_binding) + for field in BuiltInField: + if field.value == key: + break else: - dataset_metadata_binding = DatasetMetadataBinding.query.filter( - DatasetMetadataBinding.dataset_id == document.dataset_id, - DatasetMetadataBinding.document_id == document.id, - DatasetMetadataBinding.metadata_id == dataset_metadata.id, - ).first() - if not dataset_metadata_binding: + dataset_metadata = ( + db.session.query(DatasetMetadata) + .filter(DatasetMetadata.dataset_id == document.dataset_id, DatasetMetadata.name == key) + .first() + ) + if not dataset_metadata: + dataset_metadata = DatasetMetadata( + tenant_id=document.tenant_id, + dataset_id=document.dataset_id, + name=key, + type="string", + created_by=document.created_by, + ) + db.session.add(dataset_metadata) + db.session.flush() dataset_metadata_binding = DatasetMetadataBinding( tenant_id=document.tenant_id, dataset_id=document.dataset_id, @@ -597,7 +587,22 @@ def old_metadata_migration(): created_by=document.created_by, ) db.session.add(dataset_metadata_binding) - db.session.commit() + else: + dataset_metadata_binding = DatasetMetadataBinding.query.filter( + DatasetMetadataBinding.dataset_id == document.dataset_id, + DatasetMetadataBinding.document_id == document.id, + DatasetMetadataBinding.metadata_id == dataset_metadata.id, + ).first() + if not dataset_metadata_binding: + dataset_metadata_binding = DatasetMetadataBinding( + tenant_id=document.tenant_id, + dataset_id=document.dataset_id, + metadata_id=dataset_metadata.id, + document_id=document.id, + created_by=document.created_by, + ) + db.session.add(dataset_metadata_binding) + db.session.commit() page += 1 click.echo(click.style("Old metadata migration completed.", fg="green"))