如何配置Apache Solr限制单请求返回的最大文档数
给Solr 6.6.3设置单请求返回文档数硬上限的方法
嘿,这个需求太贴合实际了——毕竟谁也不想因为某个用户一次性拉走所有文档把Solr拖垮对吧?针对Solr 6.6.3,给你两个核心配置方案,组合起来用效果拉满:
1. 全局设置返回结果的终极硬上限(maxResults)
这个参数是Solr层面的“最后一道防线”,不管用户请求里传了多大的rows值,最终返回的文档数都绝对不会超过它。
操作步骤:
- 打开你对应Solr核心的
conf/solrconfig.xml文件 - 找到负责搜索的请求处理器(通常是
/select对应的<requestHandler>节点) - 在它的
<lst name="defaults">节点里添加或修改maxResults参数:
<requestHandler name="/select" class="solr.SearchHandler"> <lst name="defaults"> <!-- 保留你现有默认参数,比如rows=10之类的 --> <int name="maxResults">100</int> <!-- 这里填你想要的硬上限数值,比如100条 --> </lst> </requestHandler>
提示:如果有多个自定义的搜索请求处理器(比如给不同域名单独配置的handler),记得每个都加上这个配置哦
2. 从请求参数层面限制rows的最大值(invariants)
有些用户可能会手动传rows=10000这种离谱的值,我们可以直接强制rows的最大值,从参数入口就把它拦住。
同样在solrconfig.xml里,用<initParams>来全局配置:
<initParams path="/select"> <lst name="defaults"> <int name="rows">10</int> <!-- 维持你现有默认每页10条的逻辑 --> </lst> <lst name="invariants"> <int name="rows">100</int> <!-- 强制rows最大为100,用户传更大的值也会被自动覆盖成100 --> </lst> </initParams>
这里的invariants是“不变量”的意思,设置后用户完全无法通过请求参数修改这个值,完美实现硬限制
验证配置是否生效
修改完配置后,重启Solr服务,然后用类似这样的请求测试:
curl "http://your-solr-url:8983/solr/your-core/select?q=*:*&rows=200"
如果返回的结果数不超过你设置的上限(比如100),就说明配置生效啦!
内容的提问来源于stack exchange,提问作者Hafiz Muhammad Shafiq
相关产品推荐
相关产品推荐

