【问题标题】:POST json request to Solr with cursorMark in request在请求中使用 cursorMark 向 Solr POST json 请求
【发布时间】:2017-02-02 16:35:16
【问题描述】:

是否可以在 POST 请求的正文中包含 cursorMark 值而不是将其作为查询字符串参数发送?

以下查询:

{"query":"val:abc","limit":10,"cursorMark":"*","sort":"id asc"}

返回错误消息:“JSON 请求中的未知顶级键:cursorMark”

【问题讨论】:

  • 你如何发送这个请求?

标签: solr lucene


【解决方案1】:

根据Solr Json Request API documentation,每个查询字符串参数在JSON API中都有一个对应的POST请求参数,例如q -> 查询开始 -> 偏移量

但是,cursorMark 查询字符串参数没有等效参数。

我知道的最佳解决方案是将请求类型从 application/json 更改为 application/x-www-form-urlencoded,这允许在 POST 中使用查询字符串参数请求的正文。我使用 application/json 的原因是为了得到 json 响应,但结果它是由 wt=json 参数控制的。

  1. 将查询 uri 更改为:http://localhost:8983/solr/myCore/select?wt=json
  2. 将 POST 请求参数改回查询字符串对应项,即 q、start、rows 等。
  3. UrlEncoded 查询字符串。
  4. 将编码后的查询字符串放入 POST 正文中。
  5. 将请求内容类型更改为 application/x-www-form-urlencoded

【讨论】:

  • 感谢您的回答!您可以添加代码 sn-p 作为示例吗?我不确定如何使用 solrJ 在 solr 查询中设置内容类型参数。谢谢
【解决方案2】:

https://solr.apache.org/guide/7_7/json-request-api.html#passing-parameters-via-json 表示您可以使用非 JSON 参数扩充基于 JSON 的 POST。我在 2022 年使用包含 "params": {"cursorMark": "*"} 的 JSON 查询来实现这一点,而无需诉诸于更改请求类型(如已接受的答案中所建议的那样)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多