4

我想在 github 下对符合以下条件的提交进行高级搜索:

  • 语言:Javascript
  • 创建时间:[2011-01-01 至今]
  • 推送:[2012-05-01 TO NOW]
  • 叉子:[100 TO *]
  • 大小:[100 到 1000] //(kb)

我知道 github 使用 Lucene 来执行搜索,但是四处搜索我找不到任何关于查询语法的文档,如果我遵循 apache Lucene 文档的指导方针,我经常会收到“无效的查询语法”消息。

对于我的个人查询,我已经毫无问题地通过了语言、大小和分叉查询,但是我仍然很难找到一个好的匹配来执行基于日期的查询语法。

我必须在日期查询中包含时间戳吗?
我可以计算一下现在 - 3 个月这样的日期吗?
例如,我如何搜索从 4 个月前到现在创建的存储库?

编辑:

我与 github 支持人员交谈,他们对我说,他们使用 Solr 查询语法,该语法允许使用诸如 之类的计算进行日期范围查询NOW - 4MONTHS,但由于某种原因,它对我来说不起作用,或者我只是不明白这些过滤器是如何工作的操作(创建和推送)。

只是为了测试它,我试图找到任何以 Javascript 作为主要语言的 Repos,这两种语言都是从组合框中选择的,然后尝试使用 [created} 过滤器进行搜索,看看我有什么奇怪的结果。

对于第一次搜索,我尝试查找从今天到 12 个月前创建的任何 javascript 存储库。

创建:[NOW-12MONTHS/DAY TO NOW/DAY]

这给了我总共 233500 个回购,我在顶部列出了“twitter/bootstrap”回购。

对于第二次搜索,我试图找到从今天到 24 个月前创建的任何 Javascript 存储库。

创建:[NOW-24MONTHS/DAY TO NOW/DAY]

它不仅给了我比以前更少的存储库,总共 11867,而且我没有在结果页面中列出任何“twitter/bootstrap”存储库(我认为这是错误的,因为我的第二次搜索“包含”第一个)。第一个结果的观察者比“twitter/bootstrap”少,如果我按观察者计数排序结果,那么不把它放在顶部是错误的!

我并不是说网站上有错误,但我只是不明白它是如何使用日期范围进行计算的。希望有人可以帮助我澄清我的问题。

4

3 回答 3

2

请注意,自 2012 年 11 月 26 日(“搜索语法改进”)(由Tim Pease 撰写)以来,用于比较和范围标准的 Solr 样式语法不再是唯一的选择。

所以搜索超过 10 颗星的项目看起来像:

stars:[10 TO *]

现在它是:

stars:>10

但是 range 不支持像现在这样的类似 Solr 的语法,您需要指定日期,但没有时间戳。

cats pushed:2012-04-30..2012-07-04


2013 年 8 月更新:您现在拥有更多搜索 api 示例

 curl -ni "https://api.github.com/search/repositories?q=more+useful+keyboard" -H 'Accept: application/vnd.github.preview'

明星和看客都处于过渡期。在该转换完成之前,您将使用旧术语(即“watchers_count”)获得星数。

于 2012-12-01T17:44:39.783 回答
2

这很难看,但是您可以在搜索周围包裹一层,专门解释这些日期查询。例如,在将查询传递给 Lucene 之前,将“Created:[NOW-4MONTHS to NOW]”重写为“Created:[2012-01-21 TO 2012-05-20]”。

使用这种方法会遇到的问题包括:

  • 您需要提出包装查询语法。
  • 您需要正确解析包装查询语法。
  • 您需要将包装查询语法正确地重写为 Lucene 的语法。

据我所知,范围查询不能在其中包含子查询,因此您可以只使用正则表达式来检测您的日期范围查询,特别是如果您可以依靠日期的特定字段名称/时间查询。

于 2012-05-20T22:43:32.927 回答
1

检查 Solr 文档页面以获取确切的语法:http ://wiki.apache.org/solr/SolrQuerySyntax

对于日期搜索,语法如下:

created:[2008-01-01T00:00:00Z TO NOW]
于 2012-06-21T13:04:39.693 回答