Мне нужно отсортировать по типу поля даты, имя которого «mod_date».
В адресной строке браузера это работает следующим образом:
http://localhost:8983/solr/select/?&q=bmw&sort=mod_date+desc
Но я использую клиент phpSolr, который отправляет URL-адрес Solr, и URL-адрес отправляется так:
fq=+category%3A%22Bilar%22+%2B+car_action%3AS%C3%A4ljes&version=1.2&wt=json&json.nl=map&q=%2A%3A%2A&start=0&rows=5&sort=mod_date+desc
// This wont work and is echoed after this in php:
$queryString = http_build_query($params, null, $this->_queryStringDelimiter);
$queryString = preg_replace('/%5B(?:[0-9]|[1-9][0-9]+)%5D=/', '=', $queryString);
Это не сработает, я не знаю почему!
Все остальное работает нормально, все нужные поля возвращаются. Но сортировка не работает.
Есть идеи?
Спасибо
Кстати: поле "mod_date" содержит что-то вроде:
2010-03-04T19:37:22.5Z
EDIT:
Сначала я использую PHP, чтобы отправить это SolrPhpClient, который является другим php-файлом с именем service.php:
require_once('../SolrPhpClient/Apache/Solr/Service.php');
$solr = new Apache_Solr_Service('localhost', 8983, '/solr/');
$results = $solr->search($querystring, $p, $limit, $solr_params);
$ solr_params - это массив, содержащий параметры solr (q, fq и т. Д.).
Сейчас в service.php:
$params['version'] = self::SOLR_VERSION;
// common parameters in this interface
$params['wt'] = self::SOLR_WRITER;
$params['json.nl'] = $this->_namedListTreatment;
$params['q'] = $query;
$params['sort'] = 'mod_date desc'; // HERE IS THE SORT I HAVE PROBLEM WITH
$params['start'] = $offset;
$params['rows'] = $limit;
$queryString = http_build_query($params, null, $this->_queryStringDelimiter);
$queryString = preg_replace('/%5B(?:[0-9]|[1-9][0-9]+)%5D=/', '=', $queryString);
if ($method == self::METHOD_GET)
{
return $this->_sendRawGet($this->_searchUrl . $this->_queryDelimiter . $queryString);
}
else if ($method == self::METHOD_POST)
{
return $this->_sendRawPost($this->_searchUrl, $queryString, FALSE, 'application/x-www-form-urlencoded');
}
$results
содержит результаты Solr ...
Вот так мне нужно на работу (через php).
Этот код ниже (также поверх этого Q) работает, но это потому, что я вставляю его в адресную строку вручную, а не через PHPclient. Но это только для отладки, мне нужно заставить его работать через PHPclient:
http://localhost:8983/solr/select/?&q=bmw&sort=mod_date+des // Not via phpclient, but works
ОБНОВЛЕНИЕ (2010-03-08):
Я пробовал коды Донована (URL), и они работают нормально.
Теперь я заметил, что это один из параметров, заставляющий 'SORT' не работать.
Этот параметр является параметром "wt". Если мы возьмем URL-адрес из верхней части этого Q (fq=+category%3A%22Bilar%22+%2B+car_action%3AS%C3%A4ljes&version=1.2&wt=json&json.nl=map&q=%2A%3A%2A&start=0&rows=5&sort=mod_date+desc)
и просто удалим параметр «wt», тогда сортировка работает.
НО результаты выглядят иначе, поэтому мой php-код не может распознать результаты, которым я верю. Донован знал бы это, я думаю. Я предполагаю, что для того, чтобы PHPClient работал, результаты должны быть в определенной структуре, которая портится, как только я удаляю параметр wt.
Донован, помогите мне, пожалуйста ...
Вот некоторые сведения, для которых я использую ваш SolrPhpClient:
У меня есть сайт объявлений, который использует MySql. Но для поиска я использую Solr для поиска в некоторых проиндексированных полях. Затем Solr возвращает массив ID: numbers (для всех совпадений критериев поиска). Затем я использую эти ID: числа, чтобы найти все в базе данных MySql и получить всю другую информацию (например, это не информация для поиска).
Упрощенно: Search -> Solr возвращает все совпадения в массиве ID: nrs -> Id: числа из Solr совпадают с числами Id в базе данных MySql, поэтому я могу просто выполнить простое сопоставление каждой записи с идентификатором, совпадающим с идентификатором из массива результатов Solr.
Я не использую Faceting, без бустинга, без релевантности и прочего. Я сортирую только по последнему объявлению и даю пользователям возможность сортировать по самой низкой цене. Ничего больше.
Затем я использую параметр «fq» для выполнения запросов к различным полям в Solr в зависимости от категории, выбранной пользователями (например, «автомобили» в данном случае, которая на моем языке - «Билар»).
Я действительно застрял здесь с этой проблемой ...
Спасибо за помощь