你可以使用POST在Solr中运行查询(/ select)

Rya*_*etz 13 .net c# solr httpclient

我有查询,我正在运行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();
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

Mau*_*fer 13

  1. 不要假设.检查Solr日志以确认此错误的原因.
  2. / select接受POST请求而不会出现问题.你可以用curl试试这个:

    curl -d "q=*:*&rows=1" http://localhost:8983/solr/select
    
    Run Code Online (Sandbox Code Playgroud)

    我无法评论XmlHttpServiceClient,因为它似乎是一些专有代码,但请参阅此页面以获取使用HttpWebRequest 进行POST 的示例.

顺便说一句:有.net库可以实现与Solr的通信,除非你有一些非常奇怪的要求,否则不需要自己动手.


小智 7

请务必设置内容类型:application/x-www-form-urlencoded,否则您将获得500的状态代码.

Curl默认执行此操作.

如果您的XmlHttpServiceClient是硬编码/默认使用text/xml作为内容类型,我不会感到惊讶.HttpWebRequest更合适.