
    i                        d Z ddlmZ ddlmZ ddlmZmZ ed         Zddl	m
Z
mZ  G d de
          Z G d	 d
e
          Z G d de
          Z G d de
          Z G d de
          Z G d de
          ZdS )u   Pydantic models for the search API.

混合检索接口的请求/响应数据模型。
定义搜索筛选条件、搜索请求、文档结果、搜索响应，
以及自动补全建议的请求和响应结构。
    )annotations)date)AnyLiteral)alltitlecontent
doc_number)	BaseModelFieldc                     e Zd ZU dZ edd          Zded<    edd          Zded<    edd	          Zded
<    edd          Z	ded<    edd          Z
ded<    edddd          Zded<    edd          Zded<    edd          Zded<    edd          Zded<    edd          Zded<    ed d!          Zd"ed#<   dS )$SearchFiltersz3Optional facet filters applied to a search request.Nu!   发文机关（单个或多个）descriptionzlist[str] | str | Noneissuing_orgu!   公文种类（单个或多个）doc_typeu   知识分类/业务分类knowledge_categoryu/   文档场景类型，如 standard_service_guidedocument_scene_typeu6   签发人筛选，支持输入完整或部分签发人
str | Nonesigneril  i4  u   发布日期年份，如 2024)geler   z
int | Nonepublish_yearu0   文号筛选，支持输入完整或部分文号r
   u   发布日期起始zdate | None	date_fromu   发布日期截止date_tou   主题词列表zlist[str] | Nonesubject_wordsr   u*   检索范围：综合/标题/正文/文号SearchScopesearch_scope)__name__
__module____qualname____doc__r   r   __annotations__r   r   r   r   r   r
   r   r   r   r        0D:\work\zm-rag\backend\app\api\schemas\search.pyr   r      s        ==*/%Be*f*f*fKffff',uT?b'c'c'cHcccc16tId1e1e1eeeee27%J{2|2|2|||||t1ijjjFjjjj$uTdtIhiiiLiiii"U45ghhhJhhhh"U45IJJJIJJJJ 53GHHHGHHHH&+eD>O&P&P&PMPPPP %e9e f f fLffffffr%   r   c                      e Zd ZU dZ edddd          Zded<   d	Zd
ed<    edd          Zded<    eddd          Z	ded<   d	S )SearchRequestzPayload for ``POST /search``..   i  u$   搜索关键词或自然语言问句)
min_length
max_lengthr   strqueryNzSearchFilters | Nonefilters)r   intpage   d   r   r   	page_size)
r   r    r!   r"   r   r-   r#   r.   r0   r4   r$   r%   r&   r(   r(   $   s         ''sqSFlmmmEmmmm$(G((((aADU2!,,,I,,,,,,r%   r(   c                  .   e Zd ZU dZded<    edd          Zded<    edd	          Zd
ed<   ded<   dZded<   dZ	ded<   dZ
ded<   dZded<   dZded<   dZded<    edd          Zded<    edd          Zded<    ee          Zded<   dS )DocumentResulta  A single document hit returned in the search response.

    Each result represents a unique piece of content (``content_hash``).
    ``doc_id`` is the best-matching version for the current user.
    ``version_count`` indicates how many document versions share this content.
    r,   doc_id u$   内容标识（相同内容共享）r   content_hashr)   u'   用户可见的同内容文档版本数r/   version_countr   Nr   r
   r   r   r   publish_datezfloat | Nonescoreu   BM25 文本相关性分数
bm25_scoreu   kNN 向量相似度分数	knn_scoredefault_factory	list[str]
highlights)r   r    r!   r"   r#   r   r9   r:   r
   r   r   r   r;   r<   r=   r>   listrB   r$   r%   r&   r6   r6   -   s9          KKKb.TUUULUUUUq.WXXXMXXXXJJJ!J!!!!%)))))"K""""H#L####E$uT7STTTJTTTT#eD6QRRRIRRRR!E$777J777777r%   r6   c                  ^    e Zd ZU dZded<   ded<   ded<   ded<    ee          Zd	ed
<   dS )SearchResponsez'Response envelope for ``POST /search``.r/   totalr0   r4   zlist[DocumentResult]	documentsr?   zdict[str, Any]aggregationsN)r   r    r!   r"   r#   r   dictrH   r$   r%   r&   rE   rE   D   s]         11JJJIIINNN#####(5#>#>#>L>>>>>>r%   rE   c                  `    e Zd ZU dZ eddd          Zded<    eddd	
          Zded<   dS )SuggestRequestz%Payload for ``POST /search/suggest``..r)      )r*   r+   r,   r-      r1   r3   r/   sizeN)r   r    r!   r"   r   r-   r#   rN   r$   r%   r&   rK   rK   N   s\         //sqS999E9999aA"%%%D%%%%%%r%   rK   c                  6    e Zd ZU dZ ee          Zded<   dS )SuggestResponsez/Response envelope for ``POST /search/suggest``.r?   rA   suggestionsN)r   r    r!   r"   r   rC   rQ   r#   r$   r%   r&   rP   rP   U   s6         99"U4888K888888r%   rP   N)r"   
__future__r   datetimer   typingr   r   r   pydanticr   r   r   r(   r6   rE   rK   rP   r$   r%   r&   <module>rV      s    # " " " " "               => % % % % % % % %g g g g gI g g g - - - - -I - - -8 8 8 8 8Y 8 8 8.? ? ? ? ?Y ? ? ?& & & & &Y & & &9 9 9 9 9i 9 9 9 9 9r%   