Как одновременно обновитьзначение поля в упругом поиске с сохранением согласованности - PullRequest
0 голосов
/ 06 апреля 2019

Я храню информацию о «продуктах» в 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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...