Получение одинаковой записи на нескольких страницах, когда реализована пагинация в vespa - PullRequest
1 голос
/ 03 марта 2020

Я получаю одну и ту же запись на разных страницах, когда выполняю разбиение на страницы с помощью группировки по.

Я использую запрос, указанный ниже:

http://<hostname>:<port>/search/?yql=select * from sources document_name where sddocname contains 'document_name' | all(group(key) max(2) each(each(output(summary()))));

1 Ответ

2 голосов
/ 03 марта 2020

Вы смотрите на результаты группировки или структуру нормальных хитов? Обратите внимание, что выражение группировки никоим образом не повлияет на возвращаемые нормальные попадания.

Возможно, вы захотите добавить LIMIT 0 / hit = 0 и смотреть только результаты из выражения группировки.

Вам также необходимо (стабильное) упорядочение попаданий для разбиения на страницы по продолжениям, чтобы работать хорошо. Обычно это так, поскольку в большинстве случаев используется выражение ранжирования.

Порядок по умолчанию в выражениях группировки - по рангу - в синтаксисе выражения группировки это будет порядок (max (релевантность)) ).

Приведенный выше запрос ограничивает только тип документа. Все документы этого типа будут одинаково хорошо соответствовать этому запросу. Я проверил это, используя пример приложения «album-рекомендации-self-hoted», и релевантность была равна 0 для всех документов. Когда релевантность одинакова для всех документов, порядок будет по существу случайным. То же самое может произойти при выполнении, например, order (-count ()), если count () одинаков для нескольких групп.

Мне удалось достичь ожидаемых результатов, добавив и используя профиль ранжирования с использованием случайного Функция ранга .match: https://docs.vespa.ai/documentation/reference/rank-features.html#random Я считаю, что это должно обеспечить стабильный порядок попаданий, хотя это может привести к разным результатам, если запрос будет отправлен на разные (группы) хосты контента. Если вам требуется стабильное глобальное упорядочение, рассмотрите возможность хранения случайного числа с плавающей запятой / двойного числа для каждого документа для ранжирования / упорядочения - это также можно использовать как «t ie breaker», чтобы обеспечить стабильный порядок из выражений ранжирования.

...