ElasticSearch 批量(bluk操作)保存, 数据丢失问题

 项目中使用 ElasticSearch时抛出异常 

Caused by: org.springframework.data.elasticsearch.ElasticsearchException: Bulk indexing has failures. Use ElasticsearchException.getFailedDocuments() for detailed messages.....

 究其原因是在更新数据时,找不到原始数据, 对应的部分代码如下:


            public void save(List> searchBeanList){
			......
				if (CollectionUtils.isNotEmpty(indexQuerys)) {
					esTemplate.bulkIndex(indexQuerys);
				}
				if (CollectionUtils.isNotEmpty(updateQuerys)) {
					esTemplate.bulkUpdate(updateQuerys);
				}
			......
			}

其中 indexQuerys 为要save的数据, 而updateQuerys为要更新的数据, 有部分重合的key对应的value,

即有些数据刚save就要update. 抛出异常后,后面正常的数据也被积压在栈中而无法更新.

 究其原因是 ES本身使用的是UDP协议, 该协议没有握手机制,也无法保证通讯过程中数据不丢失.

在save的时候无法保证数据不丢失. 所以在update的时候无法找到对应的原始数据.


你可能感兴趣的:(ElasticSearch)