Github GraphQL是否支持stars、forks等多条件非等值搜索过滤?
Github GraphQL 多条件仓库过滤可行性分析
嘿,我来帮你理清这个问题——Github GraphQL完全支持你提到的所有组合过滤条件,而且远不止等值过滤哦!下面我逐个拆解每个条件的实现方式,再给你一个完整的查询示例:
- stars > 10 & forks > 3:直接用搜索限定符
stars:">10"和forks:">3",这两个是Github仓库搜索的基础限定符,支持大于/小于这类比较运算符。 - 总提交数 >=5:可以用
commits:">=5"来过滤,这个限定符会匹配默认分支提交数符合条件的仓库。 - 总问题数 >=1:用
issues:">=1"即可,这里的issues统计的是仓库所有状态的问题总数(包括已关闭的)。 - 开放问题数 <=60:专门的限定符
open_issues:"<=60"就是用来过滤开放状态的问题数量的,完全符合需求。 - 仓库大小 >2k:注意仓库大小的单位是KB,如果是指2KB就用
size:">2",如果是2MB(也就是2048KB)就用size:">2048",根据你的实际需求调整就行。 - score >5:Github搜索结果的匹配分数可以用
score:">5"来过滤,这个限定符能帮你筛选出匹配度更高的仓库。 - 最近一年内更新:用相对时间语法
pushed:">=1 year ago"最方便,它会匹配最近12个月内有推送记录(也就是更新过)的仓库;你也可以用具体日期,比如pushed:">=2023-10-01"。
这些条件可以通过空格分隔组合成一个查询字符串(空格表示逻辑AND,也就是同时满足所有条件),然后放到GraphQL的search查询中,指定类型为REPOSITORY。
下面是一个完整的GraphQL查询示例,不仅会过滤出符合条件的仓库,还会返回对应的详细字段供你验证:
query FilteredRepositories { search( query: "stars:>10 forks:>3 commits:>=5 issues:>=1 open_issues:<=60 size:>2048 score:>5 pushed:>=1 year ago" type: REPOSITORY first: 10 ) { nodes { ... on Repository { nameWithOwner stargazerCount forkCount # 获取默认分支的总提交数 defaultBranchRef { target { ... on Commit { history { totalCount } } } } # 总问题数 issues { totalCount } # 开放问题数 openIssues: issues(states: OPEN) { totalCount } size score pushedAt } } } }
需要注意的是,Github的搜索API有速率限制,如果查询结果较多,可能需要分页处理(通过after参数),但单从过滤条件的可行性来说,你提到的所有要求都能实现~
内容的提问来源于stack exchange,提问作者xpt
相关产品推荐
相关产品推荐

