我有查询,我正在运行solr索引,有时候有很长的查询参数,当我运行这些查询时出现错误,我认为这是对GET查询参数的限制。
这是我用来查询的方法(JSON),这是为了表明我使用的是Http Extensions(我使用的客户端是HttpClient的瘦包装器)而不是端到端解决方案。 90%的查询运行正常,只是当参数很大时我从solr得到500错误。我在某处读过你在执行select命令时可以使用POSt但是没有找到如何做的例子。任何帮助都会很棒!
public string GetJson(HttpQueryString qs)
{
using (var client = new DAC.US.Web.XmlHttpServiceClient(this.Uri))
{
client.Client.DefaultHeaders.Authorization = new Microsoft.Http.Headers.Credential("Basic", DAC.US.Encryption.Hash.WebServiceCredintials);
qs.Add("wt", "json");
if (!String.IsNullOrEmpty(this.Version))
qs.Add("version", this.Version);
using (var response = client.Get(new Uri(@"select/", UriKind.Relative), qs))
{
return response.Content.ReadAsString();
}
}
}
答案 0 :(得分:13)
/ select接受POST请求而不会出现问题。你可以用curl试试这个:
curl -d "q=*:*&rows=1" http://localhost:8983/solr/select
我无法评论XmlHttpServiceClient,因为它似乎是一些专有代码,但请参阅this page以获取使用HttpWebRequest进行POST的示例。
BTW:有.net库可以实现与Solr的通信,除非你有一些非常奇怪的要求,否则不需要自己动手。
答案 1 :(得分:7)
请务必设置内容类型:application / x-www-form-urlencoded ,否则您将获得500的状态代码。
Curl默认执行此操作。
如果你的XmlHttpServiceClient被硬编码/默认使用text / xml作为内容类型,那就不会让我感到惊讶。 HttpWebRequest更合适。
答案 2 :(得分:3)
Solr支持HTTP GET和HTTP POST。
执行HTTP POST时正确设置内容类型。 您可以使用Postman或Fiddler进行验证。
更正内容类型: 内容类型:应用/ X WWW的窗体-urlencoded
如果没有正确的内容类型,您将收到错误消息 :远程服务器返回错误:(400)错误请求
答案 3 :(得分:0)
是的,可以的!
只需将数据发布到同一路径(http://localhost:8983/solr/coreName/select
)。
在params
对象键中,像这样使用JSON正文发布相同的数据,而不使用查询字符串参数:
{
params: {
"q": "field:value",
"rows": 10,
"wt": "json"
}
}