- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在索引中存储不同的文档。一些工作人员正在此索引中搜索所需的文档并将它们用于自己的逻辑。问题是我想将找到的文档标记为工作人员使用的文件(或完全删除它们),但问题是多个工作人员可能会获得相同的文件,因为工作人员同时要求提供文件。
这个问题可以通过 Elasticsearch 解决,还是我需要在我这边实现锁定/同步?例如,如果 2 名 worker 要求最新的 20 份文件,我需要某种方式为每个 worker 返回不同的 20 份文件。
最佳答案
Elasticsearch 通过 optimistic locking 提供更新操作支持。因此,您可以进行搜索并获取文档列表,然后为每个文档尝试锁定它。需要传递给更新 API 的确切参数将根据 Elasticsearch 版本而有所不同,
并且您可以使用附加属性,例如 locked: true
,这将允许工作人员在进行初始搜索时忽略锁定的文档。更新可能成功或失败取决于它是否同时被其他工作人员锁定。如果失败,请忽略那些文件。
这种方法的效果取决于工作人员的数量以及当他们尝试锁定同一个文档时会出现的争用。归根结底,Elasticsearch 不是一个排队系统,可能不会针对这些用例进行优化。
您可能还对 Percolate Query 感兴趣,这反转了条件。您的工作人员可以注册一组查询,而不是搜索与特定查询匹配的文档,然后在索引文档时,只需发出渗透查询并查看文档是否与任何已注册的查询匹配,如果匹配,则将文档推送到工作队列。使用这种方法,Elasticsearch 仅用于搜索。工作人员之间的作业分配将由工作人员队列处理。
关于elasticsearch - 如何在 Elasticsearch 的并发环境中锁定/同步已使用的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57015110/
我是一名优秀的程序员,十分优秀!