Я пытаюсь обновить существующий индекс массово, используя массовый API, поэтому существуют некоторые записи, которые необходимо обновить, а некоторые новые, которые необходимо индексировать, так как их там нет. Я использовал следующий кусок кодаElasticearch java bulk upsert exception
BulkRequestBuilder bulkRequestBuilder = client.prepareBulk();
bulkRequestBuilder.add(client.prepareUpdate(InvokeMain.indexName, type, docId).setUpsert(finalMap));
Однако, с этим, я получаю следующее исключение
org.elasticsearch.action.ActionRequestValidationException: Validation
Failed: script or doc is missing;
Я предполагаю, что новые записи/новый docIds, где она выходит из строя. Любая идея, как достичь upsert (обновление, если существует, вставить, если нет) навалом?
Можете ли вы показать, как 'finalMap' выглядит? Можете ли вы попробовать вместо 'prepareIndex'? – Val
Это карта имени столбца elasticsearch, а значение - это объект, который может представлять собой карту, строку или список или что-то еще. Map. Я использую то же самое для создания индекса, отлично работает. Даже обновление существующих записей отлично работает (изменение вышеприведенного фрагмента на «setDoc (finalMap)» вместо setUpsert.) –
Также, prepareIndex, который я использую для создания индекса, существующие записи не обновляются таким образом. Поведение неустойчиво. Некоторые записи меняются, если я даю одинаковый документ во время индексирования, а некоторые нет. Кроме того, prepareIndex не предлагает upsert. –