在Github上进行高级搜索?

时间:2012-05-16 12:27:47

标签: git lucene github

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

  • 语言:Javascript
  • 创建时间:[2011-01-01至今]
  • 推动:[2012-05-01至今]
  • 福克斯:[100 TO *]
  • 尺寸:[100至1000] //(kb)

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

对于我的个人查询,我已经传递了语言,大小和分叉查询没有问题,但我仍然有问题找到一个很好的匹配来执行基于日期的查询语法。

我是否必须在日期查询中包含时间戳? 我可以对NOW - 3MONTHS等日期进行一些计算吗? 例如,我如何搜索4个月以前创建的回购?

编辑:

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

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

对于第一次搜索,我尝试找到今天和12个月之前创建的任何javascript repo。

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

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

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

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

不仅它给我的回购比以前少,总共11867,但我没有在结果页面中列出“twitter / bootstrap”回购(我觉得这是错误的,因为我的第二次搜索“包含”第一个)。第一个结果的观察者比“twitter / bootstrap”少,如果我按照观察者的顺序对结果进行排序,那么将它放在最顶层是不对的!

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

3 个答案:

答案 0 :(得分:2)

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

这种方法存在的问题包括:

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

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

答案 1 :(得分:2)

请注意,since November 26th, 2012 ("Search Syntax Improvements")(按Tim Pease),比较和范围标准的Solr风格语法不再是唯一的选择。

所以搜索超过10颗星的物品看起来像是:

stars:[10 TO *]

现在是:

stars:>10

然而,范围不支持类似Solr的语法,您需要指定日期,但不带时间戳。

  

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


2013年8月更新:您现在拥有更多 search api examples

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

明星和观察者在transition period。在转换完成之前,您将使用旧术语(即“watchers_count”)获得星数。

答案 2 :(得分:1)

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

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

created:[2008-01-01T00:00:00Z TO NOW]