我为我工作的网站创建了搜索API。例如,它支持的一些查询是:
/api/search
- 返回热门搜索结果/api/search?q=car
- 返回与术语" car" /api/search?start=50&limit=50
- 从offset 50 /api/search?user_id=3987
- 返回ID为3987 可以混合和匹配这些查询参数。它是使用Solr的分面搜索在幕后实现的。
我正致力于添加可以根据数字属性过滤结果的查询参数。例如,我可能只想返回视图计数大于100的结果。我想知道指定它的最佳做法是什么。
Solr使用这种方式:
/api/search?views:[100 TO *]
Google似乎做了类似的事情:
/api/search?viewsisgt:100
这些似乎对我都没有吸引力。是否有指定此类查询字词的最佳做法?有什么建议吗?
答案 0 :(得分:1)
只需使用','作为from / to的分隔符,它就是最好的,在我看来是直观的:
# fixed from/to
/search?views=4,2
# upper wildcard
/search?views=4,
# lower wildcard
/search?views=,4
我采取包容性价值观。在大多数情况下,您不需要独占/包含额外的语法糖。
绑定它甚至可以在一些开箱即用的框架中运行得很好(比如spring mvc),它将','分隔值绑定到值数组。然后,您可以使用特定访问器(getMin(),getMax())包装内部数组。
答案 1 :(得分:0)
谷歌的方法很好,为什么它不吸引人?
我的建议来了:
/api/search?viewsgt=100
答案 2 :(得分: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 =,&,[,],(,)保留