Skip to content

Query Builder

QueryBuilder 提供了一个流畅的 API 来构建复杂的查询条件,支持时间范围、关键词搜索、排序、分页等功能。

基本用法

go
import cursor "github.com/vibe-coding-labs/go-cursor-sdk"

// 创建查询构建器
query := cursor.NewQueryBuilder().
    TimeRange(startTime, endTime).
    Keyword("bug fix").
    Limit(10).
    SortBy("created_at", "desc").
    Build()

// 使用查询
sessions, err := client.Sessions().QuerySessions(query)

查询条件

时间范围

go
// 指定时间范围
query := cursor.NewQueryBuilder().
    TimeRange(
        time.Now().AddDate(0, 0, -7), // 7 天前
        time.Now(),                    // 现在
    ).
    Build()

关键词搜索

go
// 搜索包含特定关键词的记录
query := cursor.NewQueryBuilder().
    Keyword("bug fix").
    Build()

// 多个关键词
query := cursor.NewQueryBuilder().
    Keyword("bug").
    Keyword("fix").
    Build()

排序

go
// 按创建时间降序排序
query := cursor.NewQueryBuilder().
    SortBy("created_at", "desc").
    Build()

// 按更新时间升序排序
query := cursor.NewQueryBuilder().
    SortBy("updated_at", "asc").
    Build()

分页

go
// 限制返回数量
query := cursor.NewQueryBuilder().
    Limit(10).
    Build()

// 跳过前 N 条记录
query := cursor.NewQueryBuilder().
    Offset(20).
    Limit(10).
    Build()

过滤条件

go
// 添加自定义过滤条件
query := cursor.NewQueryBuilder().
    Filter("status", "active").
    Filter("type", "chat").
    Build()

组合查询

可以组合多个查询条件:

go
query := cursor.NewQueryBuilder().
    TimeRange(
        time.Now().AddDate(0, 0, -30), // 最近 30 天
        time.Now(),
    ).
    Keyword("refactor").
    SortBy("created_at", "desc").
    Limit(20).
    Build()

sessions, err := client.Sessions().QuerySessions(query)

实际示例

查找最近的会话

go
query := cursor.NewQueryBuilder().
    TimeRange(
        time.Now().AddDate(0, 0, -7),
        time.Now(),
    ).
    SortBy("created_at", "desc").
    Limit(10).
    Build()

sessions, err := client.Sessions().QuerySessions(query)
if err != nil {
    log.Fatal(err)
}

for _, session := range sessions {
    fmt.Printf("会话:%s\n", session.Title)
}

搜索特定主题的会话

go
query := cursor.NewQueryBuilder().
    Keyword("database").
    Keyword("optimization").
    SortBy("created_at", "desc").
    Build()

sessions, err := client.Sessions().QuerySessions(query)

分页查询

go
pageSize := 20
page := 0

for {
    query := cursor.NewQueryBuilder().
        Offset(page * pageSize).
        Limit(pageSize).
        SortBy("created_at", "desc").
        Build()
    
    sessions, err := client.Sessions().QuerySessions(query)
    if err != nil {
        log.Fatal(err)
    }
    
    if len(sessions) == 0 {
        break
    }
    
    // 处理当前页的会话
    for _, session := range sessions {
        fmt.Printf("会话:%s\n", session.Title)
    }
    
    page++
}

高级用法

复杂查询

go
// 查找最近 30 天内包含 "bug" 或 "fix" 关键词的会话
// 按创建时间降序排序,返回前 50 条
query := cursor.NewQueryBuilder().
    TimeRange(
        time.Now().AddDate(0, 0, -30),
        time.Now(),
    ).
    Keyword("bug").
    Keyword("fix").
    SortBy("created_at", "desc").
    Limit(50).
    Build()

sessions, err := client.Sessions().QuerySessions(query)

统计查询

go
// 查询特定时间范围内的统计数据
query := cursor.NewQueryBuilder().
    TimeRange(
        time.Now().AddDate(0, 0, -7),
        time.Now(),
    ).
    Build()

stats, err := client.Stats().QueryStats(query)

下一步

Released under the MIT License.