|
|
@@ -150,7 +150,7 @@ class RetrievalManager:
|
|
|
top_k=top_k
|
|
|
)
|
|
|
|
|
|
- # 为重排序结果添加混合搜索的原始元数据,只保留text_content和metadata
|
|
|
+ # 为重排序结果添加混合搜索的原始元数据,优化metadata结构
|
|
|
final_results = []
|
|
|
for rerank_result in rerank_results:
|
|
|
# 使用正确的原始索引进行元数据映射
|
|
|
@@ -158,10 +158,30 @@ class RetrievalManager:
|
|
|
if original_index < len(hybrid_results):
|
|
|
original_metadata = hybrid_results[original_index].get('metadata', {})
|
|
|
|
|
|
- # 只输出text_content和metadata
|
|
|
+ # 提取内层metadata并移除重复的content
|
|
|
+ optimized_metadata = original_metadata.copy()
|
|
|
+
|
|
|
+ # 如果内层有metadata字段,将其提取到外层
|
|
|
+ if 'metadata' in optimized_metadata and isinstance(optimized_metadata['metadata'], str):
|
|
|
+ import json
|
|
|
+ try:
|
|
|
+ # 解析JSON格式的metadata
|
|
|
+ inner_metadata = json.loads(optimized_metadata['metadata'])
|
|
|
+ optimized_metadata.update(inner_metadata)
|
|
|
+ # 移除内层的metadata字符串,避免重复
|
|
|
+ del optimized_metadata['metadata']
|
|
|
+ except (json.JSONDecodeError, TypeError):
|
|
|
+ # 如果解析失败,保持原样
|
|
|
+ pass
|
|
|
+
|
|
|
+ # 移除重复的content字段
|
|
|
+ if 'content' in optimized_metadata:
|
|
|
+ del optimized_metadata['content']
|
|
|
+
|
|
|
+ # 输出优化后的结果
|
|
|
final_result = {
|
|
|
'text_content': rerank_result['text_content'],
|
|
|
- 'metadata': original_metadata
|
|
|
+ 'metadata': optimized_metadata
|
|
|
}
|
|
|
final_results.append(final_result)
|
|
|
|