Я храню информацию о «продуктах» в ES, и каждый раз, когда пользователь выполняет поиск по ключевому слову, показываются соответствующие продукты, и он работает как ожидалось.
Теперь у меня есть требование, когда мне нужно уменьшить количество показов продукта, который представляется пользователю как часть его поискового запроса, так что теперь мне нужно обновлять поле «impression_count» каждый раз, когда я представляю этот продукт. В результате поиска я запускаю процесс обновления как отдельный поток от метода поиска, чтобы обновление не замедляло процесс поиска.
Проблема с вышеуказанной методологией : если нескольким пользователям представлен один и тот же продукт, есть большая вероятность, что значение в "impression_count" будет
не может быть последним значением из-за проблем с параллелизмом. Может ли кто-нибудь помочь мне узнать, как обновить поле «counter» и поддерживать согласованность при нескольких одновременных обновлениях.
Ниже упомянут код, который я использую для обновления документа ES каждый раз, когда происходит изменение.
Приведенный ниже фрагмент кода используется как для создания нового документа, так и для обновления существующего документа
public void saveProductsInES(Product product){
IndexQuery index = new IndexQuery();
index.setId(product.getproductId());
index.setParentId(product.getSupplierId());
index.setObject(product);
template.index(index);
template.refresh(product.class);
}