众所周知, solr 是通过 GET 方式来进行查询的。
那么solr 是否支持POST 方式进行查询呢?
通过一番调研,发现SOLR其实是支持POST方式进行查询的。
方式为:
使用form 方式提交POST请求到 select Handler即可
具体的来说:就是要在POST请求的header中添加
Content-Type:application/x-www-form-urlencoded;charset=utf-8
具体代码结构,主要在于Solr 解析请求参数部分。
参见
org.apache.solr.servlet.SolrDispatchFilter ---》
solrReq = parser.parse( core, path, req );
org.apache.solr.servlet.SolrRequestParsers ----》
SolrParams params = parser.parseParamsAndFillStreams( req, streams );
SolrQueryRequest sreq = buildRequestFrom( core, params, streams );
org.apache.solr.servlet.SolrRequestParsers.StandardRequestParser ---->
if ("POST".equals( method ) ) {
if (formdata.isFormData(req)) {
return formdata.parseParamsAndFillStreams(req, streams);
}
if (ServletFileUpload.isMultipartContent(req)) {
return multipart.parseParamsAndFillStreams(req, streams);
}
return raw.parseParamsAndFillStreams(req, streams);
}
org.apache.solr.servlet.SolrRequestParsers.FormDataRequestParser ----->
public boolean isFormData(HttpServletRequest req){}