2011-09-26 194 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