Elasticsearch Bulk API - индекс против создания / обновления

Я использую Elasticsearch Bulk API для создания или обновления документов.

Я действительно знаю, если они создаются или обновляются, но я могу упростить мой код, просто сделав их все indexили "upserts" в смысле SQL.

Есть ли недостаток в использовании index (и позволяя ES понять это), используя более явные create а также update?

3 ответа

Решение

Если вы отправляете create, вы должны убедиться, что документ еще не существует в вашем индексе, иначе вызов не удастся, тогда как отправка того же документа с index всегда будет успешным

Затем, если по соображениям производительности вы знаете, что создадите документ (с create или же index), а затем вы обновите только несколько свойств, а затем update может иметь смысл.

В противном случае, если вы всегда отправляете полные документы, я бы использовал index все время, как для создания, так и для обновления. Всякий раз, когда он видит index В этом случае ES либо создаст документ, если он не существует, либо заменит его, если он существует, но вызов всегда будет успешным.

Краткий ответ: нет, нет недостатка.

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

Вы не сможете использовать индекс для всего. Согласно документам:

index добавит или заменит документ по мере необходимости

Кроме того, если вы обновляете документ, возможно, стоит добавить флаг 'doc_as_upsert'. Больше информации здесь и здесь

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