Solr4报Search requests cannot accept content streams如何实现长查询搜索
问题原因
Solr 4 的默认搜索端点 /select 未开启请求内容流接收权限,且原生不支持直接 POST JSON 格式的搜索请求,该特性是 Solr 5 之后逐步完善、Solr 7 才默认支持的,因此直接 POST JSON 到 /select 会触发对应报错。
可行解决方案
方案1:无需修改服务端配置(推荐)
改用 application/x-www-form-urlencoded 格式的 POST 请求提交参数,不需要传 JSON 格式:
- 把原本拼接在 URI 里的所有查询参数(
q/fq/fl/rows/sort等)全部放到 POST 请求的 Body 中,按表单键值对格式拼接(示例:q=*:*&fq=type:article&rows=10) - 请求头的
Content-Type固定设置为application/x-www-form-urlencoded - 不需要改动 Solr 服务端的任何配置,直接就能适配超长查询场景,性能和 GET 请求完全一致
方案2:可修改服务端配置(支持JSON格式POST)
如果必须使用JSON格式提交查询,可修改对应Solr核的solrconfig.xml配置:
- 找到
/select对应的requestHandler配置段,添加允许接收内容流的参数:
<requestHandler name="/select" class="solr.SearchHandler"> <!-- 原有配置保持不变,新增下面这行 --> <bool name="acceptsContentStreams">true</bool> <!-- 其他原有配置 --> </requestHandler>
- 重启Solr实例生效,之后就可以和Solr7一样直接POST JSON请求到
/select端点执行查询
内容的提问来源于stack exchange,提问作者B Roy
相关产品推荐
相关产品推荐

