2012-05-16 177 views
3

我想作下github上回购为符合以下条件,提交高级搜索:高级搜索Github?

  • 语言:使用Javascript
  • 创建:2011-01-01到现在]
  • 推: [2012-05-01到现在]
  • 叉:[100 TO *]
  • 大小:[100 TO 1000] //(KB)

我知道GITH ub使用Lucene执行它的搜索,但是搜索我无法找到关于查询语法的任何文档,并且如果遵循apache Lucene文档的指导原则,我通常会以“无效的查询语法”消息结束。

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

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

编辑:

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

为了测试它,我试图找到任何以JavaScript为主要语言的Repos,这两个选择从组合框,然后尝试使用[创建]过滤器搜索,看看我有什么奇怪的结果。

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

创建:NOW-12个月/ DAY TO NOW/DAY]

这给了我一共有233500个回购和我都在上面列出的 “推特/引导” 回购。

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

创建:NOW-24月/天到NOW/DAY]

它不仅给了我比以前少了回购协议,共计11867,但我没有“推特/引导”回购在结果页面上再列出(我认为这是错误的,因为我的第二个搜索“包含”第一个)。第一个结果比“twitter/bootstrap”的观察者要少,如果我按照观察者的数量排列结果,那么就不会在顶端得到结果!

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

回答

2

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

其中你就会有这种方法的问题:

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

据我所知,范围查询不能有它里面的子查询,所以你也许可以只使用正则表达式来检测日期范围查询,特别是如果你可以在特定的字段名计数( s)查询日期/时间。

+0

感谢您的乖孩子:)我想我不想解析查询,我只是想知道为什么它不能正常工作,如果github允许Solr查询sintax,它允许我使用像** NOW - xMONTHS **这样的句子** – denica

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”)获得星星的数量。

+0

注意:语法仍然适用于[全新搜索 - 2013年1月](https://github.com/blog/1381-a-whole-new-code-search) – VonC