【问题标题】:Search API - HTTP Query Argument Format搜索 API - HTTP 查询参数格式
【发布时间】:2011-11-25 09:07:03
【问题描述】:

我为我工作的网站创建了一个搜索 API。例如,它支持的一些查询是:

  • /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 *]

Google 似乎在做这样的事情:

/api/search?viewsisgt:100

这些对我来说都不是很吸引人。是否有指定此类查询词的最佳实践?有什么建议吗?

【问题讨论】:

    标签: api http url search solr


    【解决方案1】:

    只需使用 ',' 作为 from/to 的分隔符,它读起来最好,在我看来很直观:

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

    我的价值观是包容的。在大多数情况下,您不需要独占/包含的附加语法糖。

    绑定它甚至在一些开箱即用的框架(如spring mvc)中也能很好地工作,它将','分隔的值绑定到一个值数组。然后,您可以使用特定的访问器(getMin()、getMax())包装内部数组。

    【讨论】:

      【解决方案2】:

      Google 的方法很好,为什么没有吸引力?

      这是我的建议:

      /api/search?viewsgt=100
      

      【讨论】:

      • 你的意思是viewsgt=100?我不喜欢它的原因是因为有很多解析的可能性:viewsgtviewsltviewsgteviewslte 并且它将术语与条件结合在一起,这似乎并不正确.
      【解决方案3】:

      我认为极限的数学符号是合适的。

      [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 =,&,[,],(,) 保留

      【讨论】:

      • 我从没想过这句话会出现在 h2 中,我也不知道它是怎么来的!
      • 这只是一个范围参数。你如何指定名称?可能是前缀? view_count_range= ?或者更确切地说,假设范围规范,所以view_count=100,200?
      • “只有一个范围参数”没有让你明白。多个范围参数的约束/丑陋是什么?
      • 您可以指定一个范围来过滤多个参数的结果。这是分面搜索。例如,查找查看次数大于 100 且帖子数大于 5 的项目
      猜你喜欢
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-30
      • 2012-07-21
      • 2014-07-09
      • 2018-09-09
      相关资源
      最近更新 更多