2017-03-07 90 views
0

我有一个问题,确保我的索引没有损坏。所以,我的方式做我的添加和索引的行动确保该指数不与我的数据库不同步:ElasticSearch:删除然后添加文档

  1. 获取文件的版本从DB
  2. 指数文件
从指数
  • 获取文件

    这意味着索引请求在我的索引中出现的顺序始终与数据库同步顺序无关紧要。这个问题伴随着Delete的行动。在Delete之后可能出现Add请求,并且该文档被重新添加,即使它不应该是。我知道Lucene不会立即删除文档。有什么方法可以知道已删除文档的ID吗?或者,检查已删除文档的版本?如果是,在删除请求后多长时间文档存在于索引中?

  • 回答

    0

    也许这可能工作: 1.当文档被删除时,它不会从索引中删除,而是被“删除文档”所取代。这可以通过引入具有相同ID的空白文档的概念来实现,该空白文档在被“删除”时将用空文档替换现有文档。 2.在每次插入之前,检查文档是否为“删除文档”,如果是这样,则跳过插入/索引操作,如果文档不存在或不是“删除文档”,则索引文档。这基本上是需要完成的额外工作,但允许进行删除并添加乱序。

    依赖于从lucene可能保留在某处的文档的已删除列表中获取id,将会增加时间限制。只要需要,Lucene/ES会清理已删除的文档。