models.py
2.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
"""
Request and response models for the API.
"""
from pydantic import BaseModel, Field
from typing import List, Dict, Any, Optional
class SearchRequest(BaseModel):
"""Search request model."""
query: str = Field(..., description="Search query string")
size: int = Field(10, ge=1, le=100, description="Number of results to return")
from_: int = Field(0, ge=0, alias="from", description="Offset for pagination")
filters: Optional[Dict[str, Any]] = Field(None, description="Additional filters")
min_score: Optional[float] = Field(None, description="Minimum score threshold")
# 新增字段
aggregations: Optional[Dict[str, Any]] = Field(None, description="Aggregation specifications")
sort_by: Optional[str] = Field(None, description="Sort field name")
sort_order: Optional[str] = Field("desc", description="Sort order: 'asc' or 'desc'")
debug: bool = Field(False, description="Enable debug information output")
class ImageSearchRequest(BaseModel):
"""Image search request model."""
image_url: str = Field(..., description="URL of the query image")
size: int = Field(10, ge=1, le=100, description="Number of results to return")
filters: Optional[Dict[str, Any]] = Field(None, description="Additional filters")
class SearchResponse(BaseModel):
"""Search response model."""
hits: List[Dict[str, Any]] = Field(..., description="Search results")
total: int = Field(..., description="Total number of matching documents")
max_score: float = Field(..., description="Maximum relevance score")
took_ms: int = Field(..., description="Time taken in milliseconds")
aggregations: Dict[str, Any] = Field(default_factory=dict, description="Aggregation results")
query_info: Dict[str, Any] = Field(default_factory=dict, description="Query processing information")
performance_info: Optional[Dict[str, Any]] = Field(None, description="Detailed performance timing information")
debug_info: Optional[Dict[str, Any]] = Field(None, description="Debug information (only when debug=True)")
class DocumentResponse(BaseModel):
"""Single document response model."""
id: str = Field(..., description="Document ID")
source: Dict[str, Any] = Field(..., description="Document source")
class HealthResponse(BaseModel):
"""Health check response model."""
status: str = Field(..., description="Service status")
elasticsearch: str = Field(..., description="Elasticsearch status")
customer_id: str = Field(..., description="Customer configuration ID")
class ErrorResponse(BaseModel):
"""Error response model."""
error: str = Field(..., description="Error message")
detail: Optional[str] = Field(None, description="Detailed error information")