Я сталкиваюсь со странной проблемой при передаче нескольких fq в строке запроса в SOLR.Это хорошо работает с одним fq, но несколько параметров fq не работает.я потратил два дня на эту проблему :( Согласно MSDN, несколько fq преобразуются в fq = 1,2,3. Я написал утилиту для разделения запятых, и теперь fq выглядит как fq = 1 & fq = 2 & fq = 3. Я пытался сделать то же самое из SOLR.Пользовательский интерфейс работает отлично. Пример -
https://example.com:8765/solr/test/select?fq=last_save_date:{2016-01-01T00:00:00Z TO 2018-01-01T23:59:59Z}&fq=id:*.pdf&q="John"&start=0&rows=20
Я попробовал то же самое из моего кода C #, и он формирует URL как -
https://example.com:8765/solr/test/select?fq=last_save_date:{2016-01-01T00:00:00Z TO 2018-01-01T23:59:59Z}&fq=id:*.pdf&q="John"&start=0&rows=20
Интересно то, что URL, который я получаю в ответ от кодакогда я пытаюсь это сделать прямо в браузере, это работает, даже если я попробовал приведенный ниже код, чтобы проверить, является ли URL верным, и возвращает ожидаемый результат -
string html;
using (WebClient client = new WebClient())
{
var string1 = "\"John\"";
html = client.DownloadString(@"https://example.com:3456/solr/test/select?fq=last_save_date:{2016-01-01T00:00:00Z TO 2018-01-01T23:59:59Z}&fq=id:*.pdf&q=" + string1 + "&start=0&rows=20");
}
Мой код -
System.Uri uri = new System.Uri(solrCoreConnection + "/example");
SolrUtility utility = new SolrUtility("fq"); // This utility split commas from multiple fq and add &fq=
using (WebClient wc = new WebClient())
{
if (!string.IsNullOrEmpty(dateTime))
{
utility.Add("fq", dateTime);
}
if (!string.IsNullOrEmpty(filename))
{
utility.Add("fq", filename);
}
wc.QueryString = utility;
// This line throws bad request (400)
byte[] data = wc.UploadValues(uri, "POST", wc.QueryString);
catch (WebException ex)
{
if (ex.Status == WebExceptionStatus.ProtocolError && ex.Response != null)
{
var resp = (HttpWebResponse)ex.Response;
if (resp.StatusCode == HttpStatusCode.NotFound) // HTTP 404
{
//Handle it
}
}
//Handle it
}