Elasticsearch: используйте API обновлений, но с контролем версий - PullRequest
0 голосов
/ 19 июня 2020

Предыстория: Прямо сейчас у нас есть два процессора, записывающих разные «частичные данные» в один и тот же индекс elasticsearch. Частичные данные одного процессора - это «потоковые данные», обновляемые с некоторыми полями, но с одним и тем же идентификатором документа каждые x секунд.

например, если мы скажем, что c - это полный документ elsticsearch, который мы пишем, распределенный процессор1 сохраняет записывает данные потока a каждые x секунд -> elasti c поисковый документ c & processor2 сохраняет записанные одноразовые данные b -> elasti c поисковый документ c и c = (a U b)

Поэтому нам нужно использовать API обновления с этим частичным обновлением вместо API индекса, чтобы предотвратить перезапись a или b.

Но мой вопрос прямо сейчас из-за проблемы управления параллелизмом, мы хотим предотвратить перезапись более новой версии более старой, мы пытались использовать внешнюю версию, например, установить «updated_time.toUT C ()» как номер версии, чтобы предотвратить подобные вещи. Но Update Api не поддерживает внешнюю версию, и я не думаю, что if_seq_no или if_primary_term могут помочь, поскольку мы не можем просто «установить» эти два числа, как это делают во внешней версии. https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update.html

Один из возможных способов - сначала отправить поисковый запрос -> получить документ и объединить его с текущими данными -> использовать Index Api и внешнюю версию, но для этого потребуется дополнительный поисковый запрос для всех данных.

Просто поинтересуйтесь, есть ли другие предложения, как включить как «Обновить Api», так и «Внешнюю версию» без дополнительного запроса.

...