2012-05-16 213 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