Files
news/vectorstore/models.py
T
simon 65ead54b4f docs: 文档清理与重构 — 统一为 3 个核心文档
- 删除 5 个过时/残留文档(project_plan/agent_prompt/optimization_plan/report_db_design/deploy/README)
- 新建 docs/architecture.md(项目架构:11 包职责+数据模型+配置+产物)
- 重写 docs/user-guide.md(CLI 全量+增量/断点续跑+MCP+FAQ)
- 重写 README.md(精简入口+文档索引)
- 更新 continuation.md(追加本次记录)
- 更新 .gitignore(排除 data/* 运行产物)
2026-08-22 17:10:39 +08:00

55 lines
1.6 KiB
Python

"""Qdrant 向量存储模块的数据模型 (M6)。"""
from __future__ import annotations
from datetime import datetime
from typing import Any
from pydantic import BaseModel, Field
class SearchFilter(BaseModel):
"""可选检索过滤条件,全部为 AND 关系。"""
source_id: str | None = None
source_ids: list[str] | None = None
stock_codes: list[str] | None = Field(default=None, description="match any")
company_names: list[str] | None = Field(default=None, description="match any")
industries: list[str] | None = Field(default=None, description="match any")
sentiment: str | None = None # positive / neutral / negative
importance_min: int | None = None # >= N
event_types: list[str] | None = None # match any
publish_date_from: str | None = None # YYYY-MM-DD
publish_date_to: str | None = None # YYYY-MM-DD
class SearchResult(BaseModel):
"""单条检索结果。"""
url_hash: str
score: float
title: str
url: str
source_id: str
publish_time: datetime | None = None
event: dict[str, Any] | None = None # EventExtraction 展开的 dict
char_count: int | None = None
word_count: int | None = None
def short_summary(self) -> str:
codes = (
",".join((self.event or {}).get("stock_codes", []))
if self.event else "-"
)
return f"[{self.source_id}] score={self.score:.4f} 《{self.title[:40]}》 {codes}"
class CollectionInfo(BaseModel):
"""Collection 概览信息。"""
name: str
exists: bool
vectors_count: int
indexed_vectors_count: int | None = None
segments_count: int | None = None