in src/psearch/serving/internal/api/handlers.go [69:109]
func (c *Controller) Search(ctx *gin.Context) {
// Parse the request body
var req models.SearchRequest
if err := ctx.ShouldBindJSON(&req); err != nil {
ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
// Set default values if not provided
limit := c.config.DefaultLimit
if req.Limit != nil {
limit = *req.Limit
}
minScore := c.config.MinScoreValue
if req.MinScore != nil {
minScore = *req.MinScore
}
alpha := c.config.DefaultAlpha
if req.Alpha != nil {
alpha = *req.Alpha
}
log.Printf("Search request: query=%s, limit=%d, minScore=%.2f, alpha=%.2f",
req.Query, limit, minScore, alpha)
// Perform the hybrid search
results, err := c.spannerSvc.HybridSearch(ctx, req.Query, limit, minScore, alpha)
if err != nil {
log.Printf("Search error: %v", err)
ctx.JSON(http.StatusInternalServerError, gin.H{"error": "Search failed"})
return
}
// Return the results
ctx.JSON(http.StatusOK, models.SearchResponse{
Results: results,
TotalFound: len(results),
})
}