Можете ли вы использовать POST для запуска запроса в Solr (/ select) - PullRequest
12 голосов
/ 08 июня 2010

У меня есть запросы, которые я выполняю против индекса Solr, которые иногда имеют очень длинные параметры запроса, я получаю ошибки, когда выполняю эти запросы, что, как я полагаю, делает до предела параметров запроса GET.

Вот метод, который я использую для запроса (JSON), чтобы показать, что я использую расширения Http (клиент, который я использую, является тонкой оболочкой для HttpClient), а не сквозное решение. 90% запросов работают нормально, просто когда параметры большие, я получаю ошибку 500 от solr. Я где-то читал, что вы можете использовать POSt при выполнении команды select, но не нашел примеров того, как это сделать. Любая помощь будет фантастической!

    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();
            }
        }
    }

Ответы [ 4 ]

13 голосов
/ 08 июня 2010
  1. Не думай. Проверьте журнал Solr, чтобы подтвердить причину этой ошибки.
  2. / select принимает запросы POST без проблем. Вы можете попробовать это с помощью curl:

    curl -d "q=*:*&rows=1" http://localhost:8983/solr/select
    

    Я не могу комментировать XmlHttpServiceClient, так как он кажется неким проприетарным кодом, но см. на этой странице пример POSTing с использованием HttpWebRequest.

Кстати: есть библиотеки .net, которые реализуют связь с Solr, нет необходимости создавать свои собственные, если у вас нет очень странных требований.

7 голосов
/ 27 апреля 2011

Обязательно установите Тип содержимого: application / x-www-form-urlencoded , иначе вы получите код состояния 500.

Curl делает это по умолчанию.

Меня не удивит, если ваш XmlHttpServiceClient будет жестко задан / по умолчанию будет использовать text / xml в качестве типа контента. HttpWebRequest более уместен.

3 голосов
/ 23 ноября 2016

Solr Поддерживает HTTP GET и HTTP POST.

При выполнении HTTP POST правильно установите тип содержимого. Вы можете проверить это с помощью Почтальона или Скрипача.

Правильный тип контента: Content-Type: применение / х-WWW-форм-urlencoded

.

Без правильного типа контента вы получите сообщение об ошибке как : Удаленный сервер возвратил ошибку: (400) неверный запрос

0 голосов
/ 01 июня 2019

Да, вы можете!

Просто отправьте данные по тому же пути (http://localhost:8983/solr/coreName/select).

Вместо использования параметров строки запроса, POST те же данные, что и тело JSON, в ключе объекта params, например:

{
  params: {
     "q": "field:value",
     "rows": 10,
     "wt": "json"
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...