咸鱼平台商品关键字搜索API接口设计与实现

电子说

1.4w人已加入

描述

一、接口设计规范

请求方式:GET请求

URL路径:/api/search

请求参数

keyword:搜索关键词(必填)

page:页码(默认1)

page_size:每页数量(默认20)

sort:排序方式(可选:price_asc, price_desc, time_desc)

二、技术实现方案

核心逻辑

关键词分词处理

多字段匹配(标题/描述/标签)

结果排序与分页

 

# Python伪代码示例
from flask import request, jsonify

@app.route('/api/search', methods=['GET'])
def search_items():
    keyword = request.args.get('keyword', '')
    page = int(request.args.get('page', 1))
    page_size = int(request.args.get('page_size', 20))
    
    # 分词处理(以空格分割)
    keywords = keyword.split()
    
    # 数据库查询(使用ORM示例)
    query = Item.query.filter(
        or_(
            *[Item.title.like(f"%{kw}%") for kw in keywords],
            *[Item.description.like(f"%{kw}%") for kw in keywords]
        )
    )
    
    # 分页处理
    pagination = query.paginate(page=page, per_page=page_size)
    
    return jsonify({
        'data': [item.to_dict() for item in pagination.items],
        'total': pagination.total,
        'current_page': pagination.page
    })
接口

 

三、性能优化策略

索引优化

 

CREATE INDEX idx_title ON items(title);
CREATE INDEX idx_description ON items(description);
接口

 

缓存机制

 

# Redis缓存示例
cache_key = f"search:{keyword}:{page}"
if redis.exists(cache_key):
    return json.loads(redis.get(cache_key))
接口

 

异步处理

对于复杂搜索场景可使用消息队列异步更新搜索结果

四、安全防护

SQL注入防护:

 

# 使用参数化查询替代字符串拼接
query = "SELECT * FROM items WHERE title LIKE %s"
cursor.execute(query, ('%' + keyword + '%',))
接口

 

请求频率限制:

 

# 使用令牌桶算法限流
@limiter.limit("10/minute")
接口

 

五、响应格式示例

 

{
  "code": 200,
  "data": [
    {
      "id": "123",
      "title": "二手iPhone 13",
      "price": 3999.00,
      "thumb_url": "https://example.com/img1.jpg"
    }
  ],
  "pagination": {
    "total": 150,
    "current_page": 1,
    "total_pages": 8
  }
}
接口

 

六、注意事项

敏感词过滤机制

搜索结果去重处理

接口文档维护(建议使用Swagger)

此方案适用于中小型电商平台,日均百万级请求需引入Elasticsearch等专业搜索引擎,并采用微服务架构部署搜索集群。

​审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分