add built-in field check when doing old metadata migrate (#16371)

This commit is contained in:
Jyong
2025-03-20 21:53:49 +08:00
committed by GitHub
parent e324e59930
commit 72191f5b13

View File

@@ -12,6 +12,7 @@ from configs import dify_config
from constants.languages import languages from constants.languages import languages
from core.rag.datasource.vdb.vector_factory import Vector from core.rag.datasource.vdb.vector_factory import Vector
from core.rag.datasource.vdb.vector_type import VectorType 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 core.rag.models.document import Document
from events.app_event import app_was_created from events.app_event import app_was_created
from extensions.ext_database import db from extensions.ext_database import db
@@ -559,36 +560,25 @@ def old_metadata_migration():
if document.doc_metadata: if document.doc_metadata:
doc_metadata = document.doc_metadata doc_metadata = document.doc_metadata
for key, value in doc_metadata.items(): for key, value in doc_metadata.items():
dataset_metadata = ( for field in BuiltInField:
db.session.query(DatasetMetadata) if field.value == key:
.filter(DatasetMetadata.dataset_id == document.dataset_id, DatasetMetadata.name == key) break
.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)
else: else:
dataset_metadata_binding = DatasetMetadataBinding.query.filter( dataset_metadata = (
DatasetMetadataBinding.dataset_id == document.dataset_id, db.session.query(DatasetMetadata)
DatasetMetadataBinding.document_id == document.id, .filter(DatasetMetadata.dataset_id == document.dataset_id, DatasetMetadata.name == key)
DatasetMetadataBinding.metadata_id == dataset_metadata.id, .first()
).first() )
if not dataset_metadata_binding: 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( dataset_metadata_binding = DatasetMetadataBinding(
tenant_id=document.tenant_id, tenant_id=document.tenant_id,
dataset_id=document.dataset_id, dataset_id=document.dataset_id,
@@ -597,7 +587,22 @@ def old_metadata_migration():
created_by=document.created_by, created_by=document.created_by,
) )
db.session.add(dataset_metadata_binding) 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 page += 1
click.echo(click.style("Old metadata migration completed.", fg="green")) click.echo(click.style("Old metadata migration completed.", fg="green"))