2011-09-26 68 views
1

我爲我工作的網站創建了一個搜索API。例如,一些支持查詢的是:搜索API - HTTP查詢參數格式

  • /api/search - 返回熱門搜索
  • /api/search?q=car - 返回結果的期限匹配「車」
  • /api/search?start=50&limit=50 - 返回50個結果開始偏移50
  • /api/search?user_id=3987 - 返回用戶擁有的ID 3987

這些查詢參數可以混合並匹配。它使用Solr的分面搜索在引擎蓋下實施。

我正在努力添加可以根據數字屬性過濾結果的查詢參數。例如,我可能只想返回查看計數大於100的結果。我想知道指定此操作的最佳做​​法是什麼。

Solr的使用是這樣的:

/api/search?views:[100 TO *] 

谷歌似乎做這樣的事情:

/api/search?viewsisgt:100 

這些都不似乎對我很有吸引力。有沒有指定這種查詢術語的最佳做法?有什麼建議麼?

回答

1

只需使用 '' 作爲分離器,用於從/到時,它讀取最好和我認爲是直觀的:

 

# fixed from/to 
/search?views=4,2 

# upper wildcard 
/search?views=4, 

# lower wildcard 
/search?views=,4 
 

我採取包含值。在大多數情況下,您將不需要獨佔/包含額外的語法糖。

綁定它甚至可以在一些開箱即用的框架(如spring mvc)中起作用,它將','分隔的值綁定到一個值數組。然後,您可以用特定訪問器(getMin(),getMax())包裝內部數組。

0

谷歌的方法很好,爲什麼它沒有吸引力?

這裏說到我的建議:

/api/search?viewsgt=100 
+0

你的意思是''viewsgt = 100''?我不喜歡它的原因是因爲有這麼多的可能性來解析:''viewsgt'','viewslt'','viewsgte'','viewslte'',並且它與條件,這似乎並不正確。 – jterrace

0

我覺得限制的數學符號是合適的。

[x the lower limit can be atleast x 
x] the upper limit can be atmost x 
(x the lower limit must be strictly greater than x 
x) the upper limit must be strictly lesser than x 

因此,

q=cats&range=(100,200) - the results from 100 to 200, but not including 100 and 200 
q=cats&range=[100,200) - the results from 100 to 200, but the lower limit can be greater than 100 
q=cats&range=[100 - any number from 100 onwards 
q=cats&range=(100 - any number greater than 100 
q=cats&range=100,200 - default, same as [100,200] 

當然,它的美學仍然值得懷疑,但似乎(IMO)最直觀對於人眼,解析器還是容易的。

作爲每http://en.wikipedia.org/wiki/Percent-encoding =,&,[,],(,)是保留

+0

我從來沒有把這句話寫成h2,我不知道這是怎麼回事! – aitchnyu

+0

儘管這只是一個範圍參數。你如何指定名稱?一個前綴可能? ''view_count_range =''?或者說,假設範圍規範,所以''view_count = 100,200''? – jterrace

+0

「只有一個範圍參數」沒有讓你。什麼是多個範圍參數的約束/醜陋? – aitchnyu