# Collapse + rescore функциональность

**URL:** <https://discuss.elastic.co/t/collapse-rescore/176870>\
**Category:** Вопросы на русском языке\
**Created:** [April 15, 2019, 9:44am UTC](https://discuss.elastic.co/t/collapse-rescore/176870 "2019-04-15T09:44:47Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Maxim\_Sychenko](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/maxim_sychenko/32/44026_2.png) [@Maxim\_Sychenko](https://discuss.elastic.co/u/Maxim_Sychenko)\
**Post date:** [April 15, 2019, 9:44am UTC](https://discuss.elastic.co/t/collapse-rescore/176870/1 "2019-04-15T09:44:47Z")

</div>

Я знаю что раньше в версии 5.3 была функциональность rescore+collapse [https://github.com/elastic/elasticsearch/pull/28521](https://github.com/elastic/elasticsearch/pull/28521) и что ее выпилили, но в моей ситуации мне такая функциональность необходима. Основная идея - создать плагин который бы позволил эмулировать такое поведение  
Я изучал исходные коды elastic'a и вот что получается:

- `QueryPhase` имеет строгий порядок выполнения и rescore выполняется после всех collectors (в `static boolean execute`) и до выполнения второй фазы агрегации `aggregationPhase.execute(searchContext);`
- все что мне нужно это в реализовоном мной классе унаследованом от `InternalAggregations` реализовать reduce метод в котором я и буду делать collapsing по id элемента с сортировкой по score

Мой вопрос - есть ли другие способы реализовать эту функциональность с помощью плагина (менять код эластика я не хочу, во всяком случае пока). Если нет то как можно вытащить score во время агригации (я так понял что можно через вложеную агрегацию с скриптингом, что выглядит не слишком хорошо)

эластик 6.6

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [April 15, 2019, 12:14pm UTC](https://discuss.elastic.co/t/collapse-rescore/176870/2 "2019-04-15T12:14:30Z")

</div>

Вы видели последний [комментарий](https://github.com/elastic/elasticsearch/pull/28521#issuecomment-377522283) от Джима? Вы как с этим будите бороться?

---

<div class="post-metadata">

**Author:** ![Maxim\_Sychenko](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/maxim_sychenko/32/44026_2.png) [@Maxim\_Sychenko](https://discuss.elastic.co/u/Maxim_Sychenko)\
**Post date:** [April 15, 2019, 12:21pm UTC](https://discuss.elastic.co/t/collapse-rescore/176870/3 "2019-04-15T12:21:02Z")

</div>

насколько я понял, то проблема в том что из за скора на разных шардах могут не правльно разбиваться/определяться топ документы, в моем случае score должен выдавать LTR и проблем стандартных алгоритмов расчета вроде TF/IDF и bm25 не должно быть

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [April 17, 2019, 1:06pm UTC](https://discuss.elastic.co/t/collapse-rescore/176870/4 "2019-04-17T13:06:54Z")

</div>

> [@Maxim\_Sychenko](#):
>
> все что мне нужно это в реализовоном мной классе унаследованом от `InternalAggregations` реализовать reduce метод в котором я и буду делать collapsing по id элемента с сортировкой по score

Я не очень понимаю, что вы хотите сделать, но в контексте `map_script` агрегации [scripted\_metrics](https://www.elastic.co/guide/en/elasticsearch/reference/6.7/search-aggregations-metrics-scripted-metric-aggregation.html) есть доступ к `score`. Так что может начать со script engine плагина и использовать эту агрегацию?

---

<div class="post-metadata">

**Author:** ![Maxim\_Sychenko](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/maxim_sychenko/32/44026_2.png) [@Maxim\_Sychenko](https://discuss.elastic.co/u/Maxim_Sychenko)\
**Post date:** [April 18, 2019, 1:24pm UTC](https://discuss.elastic.co/t/collapse-rescore/176870/5 "2019-04-18T13:24:01Z")

</div>

Я хочу после рескора, сделать коллапс. При этом рескор будет из плагина который получает веса из LTR'a.

Возможно, для решения задачи в плагине не нужны переопределять агрегаты, может быть есть более правильный/элегантный/производительный подход? Насколько решение с пропатченым elastic'ом и его queryPhase будет быстрее плагина с агрегатами? Естественно что это все нужно мерить, после разработки на близком к проду окружении, но, кажется, есть очевидные вещи для тех кто работает с эластиком каждый день.

Мои наблюдения, возможно не совсем верны, именно поэтому я прошу совета у тех кто может дать направление в котором можно (если можно) **правильно** решить задачу, так чтобы в продакшене это не ложилось при 1000 rps с response tim'ом в 200ms на кластере в 8 машин при кол-ве документов ~10млн.

P.S. Насколько я знаю любой доступ к скриптам сильно влияет на производительность, возможно это не так

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [April 23, 2019, 2:56pm UTC](https://discuss.elastic.co/t/collapse-rescore/176870/6 "2019-04-23T14:56:26Z")

</div>

> Я хочу после рескора, сделать коллапс.

Теперь понял. Я не думаю, что это можно сделать без значительной переработки elasticsearch, которую вы хотели-бы избежать. Надо смотреть глубже, но в данный момент у меня, к сожалению, нет для этого времени.

---

<div class="post-metadata">

**Author:** ![Maxim\_Sychenko](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/maxim_sychenko/32/44026_2.png) [@Maxim\_Sychenko](https://discuss.elastic.co/u/Maxim_Sychenko)\
**Post date:** [April 24, 2019, 12:02pm UTC](https://discuss.elastic.co/t/collapse-rescore/176870/7 "2019-04-24T12:02:25Z")

</div>

Спасибо за ответ! Сэкономили кучу времени которые мы хотели потратить на плагин.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [May 22, 2019, 12:02pm UTC](https://discuss.elastic.co/t/collapse-rescore/176870/8 "2019-05-22T12:02:32Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
