2015-07-07 3 views
0

У меня есть индекс ElasticSearch с 2 сопоставлениями (типами). В приложении мне нужно отобразить постраничный фид, содержащий элементы обоих типов. В настоящее время элементы сортируются только по дате создания, но я также хочу иметь контроль над тем, как элементы чередуются друг с другом на странице. Например, я хочу установить правило для последовательности «3 элемента типа A, 1 элемент типа B и т. Д.». Мне нужно, чтобы элементы обоих типов отображались на каждой странице и равномерно распределялись по страницам.Функция оценки ElasticSearch в зависимости от соседних документов

Но, насколько я вижу, невозможно получить доступ к другим документам в скрипте пользовательской оценки.

Конечно, это легко реализовать непосредственно в логике приложения, но неясно, как реализовать разбиение на страницы таким образом.

Любые идеи о том, как достичь этого?

+0

Какие идентификаторы у вас есть для этих документов –

+0

регулярные целые числа (которые представляют собой MySQL автоинкремент идентификаторы) –

+0

Если ваши результаты сортируются по дате создания, как это происходит с '3 элементами типа A, 1 элементом типа B и т. Д.? Сортировка по дате больше не будет иметь смысла. –

ответ

0

Я не думаю, что вы можете это сделать.

Один подход (который не работает) заключается в том, чтобы сохранить глобальную переменную в скрипте и увеличить ее, как только каждый документ будет возвращен/обработан. И затем, чтобы принять это число, разделите его на 3 и получите число по модулю. На основе этого номера, чтобы отсортировать документы. Но «глобальных» переменных в сценариях невозможно.

Единственные два подхода, о которых я могу думать, - использовать скрипт для генерации случайного числа и на основе этого сортировать. Таким образом, у вас есть некоторые шансы получить «смешанный список типов».

Или, если вы хотите наименьший детерминированный способ сортировки документов, все еще в сценарии взять идентификатор документа (вы сказали, что это число) по модулю 3 и использовать значение для сортировки

для случайного подхода:.?.

"sort": [ 
    { 
     "date": { 
     "order": "desc" 
     } 
    }, 
    { 
     "_script": { 
     "script": "Math.random()", 
     "type": "number", 
     "order": "asc" 
     } 
    } 
    ] 
Смежные вопросы