Могу ли я использовать более новую версию Java-клиента высокого уровня отдыха на более старой версии asticsearch?

На AWS мы работаем с ArcticSearch, который в настоящее время поддерживает Elassearch 6.3 в качестве последней версии.

У нас есть бизнес-пример, в котором нам нужно обновлять все документы в индексе и каждый день удалять один вложенный объект. Существует API-интерфейс UpdateSearch UpdateSearch, который решит нашу задачу.

Но в нашем Java-приложении мы используем Java-клиент высокого уровня отдыха. Обновление по запросу API поддерживается оставшейся версией клиента 6.5. Теперь, если мы обновим оставшийся клиент до версии 6.5, нам нужно будет обновить версию asticsearch в нашем pom. В противном случае они не совместимы.

    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>${elasticsearch.version}</version>
    </dependency>

    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>${elasticsearch.version}</version>
    </dependency>

Итак, можем ли мы обновить версию клиента и asticsearch до 6.5 в нашем java-сервисе и по-прежнему использовать asticsearch 6.3? Я попробовал это, и это работает, но просто хочу быть тщательным, поскольку мы не хотим, чтобы наши данные были повреждены.

Редактировать: Обновление по запросу также доступно в 6.3, но этот API-интерфейс использует более старый Transportclient, который должен быть объявлен устаревшим в ближайшее время.

2 ответа

По словам Elasticsearch,

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

Это также должно применяться наоборот (более новый клиент для старой версии ES)

Кроме того, в этой Рекомендации, отмеченной @Samuel Kok, говорится:

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

На основе эластичной поисковой документации

Клиент высокого уровня гарантированно сможет обмениваться данными с любым узлом Elasticsearch, работающим в той же основной версии и более или менее вспомогательной версии.

Клиент 6.0 может обмениваться данными с любым узлом 6.x Elasticsearch, в то время как клиент 6.1 наверняка может обмениваться данными с 6.1, 6.2 и любой более поздней версией 6.x, но могут быть проблемы несовместимости при взаимодействии с предыдущим узлом Elasticsearch версия, например между 6.1 и 6.0, в случае, если клиент 6.1 поддерживает новые поля тела запроса для некоторых API, которые не известны узлам 6.0.

Другими словами, Java Rest Client никогда не должен быть новее, чем узел Elasticsearch.

В вашем случае настоятельно рекомендуется либо обновить Elastic Search до версии 6.5, либо понизить версию Java Rest Client до версии 6.3.

Обновление по запросу также доступно в версии 6.3, поэтому я не понимаю, почему вам нужно использовать версию 6.5 Java Rest Client. Если только в API Updated By Query, выпущенном в 6.5, нет новых функций, о которых я не знаю.

Другие вопросы по тегам