Solr 7.3 - Сортировка условно по многозначному полю - PullRequest
0 голосов
/ 16 декабря 2018

Я новичок в Solr, использую Solr 7.3 и пытаюсь добиться следующего - учитывая дату, мне нужно получить все продукты, у которых есть контракты, срок действия которых истекает после этой даты, отсортированные по самому раннему контракту с истекающим сроком действия, но без учетауже истекшие контракты.Я не могу получить правильную сортировку.В приведенном ниже случае product_id "10002023" должен был быть последним в списке, поскольку у него есть контракт, срок действия которого истекает последним (2021-08-31), игнорируя уже истекший контракт.Любая помощь с благодарностью.

http://localhost/solr/catalogue/select?fl=product_id,%20contract_id,%20contract_valid_to&fq=contract_id:[*%20TO%20*]&fq=contract_valid_to:%20[2018-12-12%20TO%20*]&q=*:*&sort=field(contract_valid_to,%20min)%20asc

..."docs":[
{
  "product_id":"10002023",
  "contract_id":["1427",
    "1428"],
  "contract_valid_to":["2018-12-07 15:36:13.0",
    "2021-08-31 15:40:33.0"]},
{
  "product_id":"1012974",
  "contract_id":["867"],
  "contract_valid_to":["2019-05-16 15:58:01.0"]},
{
  "product_id":"1012985",
  "contract_id":["777"],
  "contract_valid_to":["2019-05-19 11:07:50.0"]},
{
  "product_id":"1012975",
  "contract_id":["787"],
  "contract_valid_to":["2019-05-24 12:02:18.0"]},
{
  "product_id":"1012997",
  "contract_id":["831"],
  "contract_valid_to":["2019-05-29 15:37:37.0"]}]

1 Ответ

0 голосов
/ 18 декабря 2018

К сожалению, определение, которое вы используете для поля даты, неверно

<dynamicField name="contract_*" type="string" multiValued="true" indexed="true" stored="true"/>

Предполагается, что это простая строка, не отличающаяся от чего-либо еще.

ТакжеЧто касается вашего второго комментария, Solr поддерживает даты только в 1 формате - YYYY-MM-DDThh:mm:ssZ, поэтому, если вы хотите использовать функции даты, вам нужно будет выполнить преобразование в правильный формат и использовать тип date.

...