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'. Больше информации здесь и здесь