搜索:把名称搜索从纯 ILIKE 子串升级为 trigram 词级模糊(容忍错别字,如 choclate→Chocolate、nutela→Nutella),并新增品牌/产地过滤与相关度排序。匹配仍是包容式(子串 OR 模糊 OR 条码),排序按 word_similarity(q, name) * (0.5 + quality_score)——相似度主导、质量分做不归零的乘子。无 q 时按质量分返回。
WHERE p.status='active'
AND ( name ILIKE '%q%' OR word_similarity(q, name) >= 0.42 OR barcode ILIKE '%q%' )
[AND c.path <@ category::ltree] [AND b.name ILIKE '%brand%'] [AND country ILIKE 'country%']
ORDER BY word_similarity(q, name) * (0.5 + quality_score) DESC, quality_score DESC, name
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
M5 第二部分:搜索升级 + 开发者文档(接续已合并的 #7 API Key/限流)。
搜索:把名称搜索从纯
ILIKE子串升级为 trigram 词级模糊(容忍错别字,如choclate→Chocolate、nutela→Nutella),并新增品牌/产地过滤与相关度排序。匹配仍是包容式(子串 OR 模糊 OR 条码),排序按word_similarity(q, name) * (0.5 + quality_score)——相似度主导、质量分做不归零的乘子。无q时按质量分返回。ProductSummary响应新增country_of_origin、quality_score、score(相关度,提供q时为 0–1,否则null)。文档:
GET /api/v1/openapi.json(内嵌 OpenAPI 3 规范,不计入限流,便于工具拉取)。X-API-Key/Bearer、X-RateLimit-*、429/401),并更新搜索端点的参数/返回示例。docs/api.md开发者指南;公开站搜索页加入品牌/产地过滤输入框并展示产地。迁移
0009_search:brand.name加 GIN trgm 索引、product.country_of_origin加 btree 索引(pg_trgm与product.name的 trgm 索引在 0001 已建)。测试
本地 docker postgres+redis:迁移 up/down-all/up 可逆;
go vet/gofmt/go test ./...全过(新增TestSearchFuzzyAndFilters、TestOpenAPISpec,依赖 Redis 的用例无 Redis 时自动 skip)。真实 HTTP 烟测:错别字命中、品牌/产地过滤、openapi.json200 且不带限流头。两个前端npm run build通过。