在我的程序中,我将从elasticsearch中删除一条记录,然后我将获取剩余的记录。
我写了两个不同的方法。 1删除记录的方法。 另一个是获取剩余的记录。
但是当我运行这两个方法时它会返回所有记录,包括我删除的记录。
我正在运行程序,只有在从deleteRecords获取成功消息后才能获取数据,但它会提供所有记录。
几秒钟之后如果我运行我编写的程序来单独获取剩余记录,那么它正常工作它将仅返回剩余的方法。
当我尝试在调试模式下运行两个方法时,它只返回剩余的记录
有没有办法解决这个问题而不使用延迟
答案 0 :(得分:2)
默认情况下,索引会每秒刷新一次,因此您不会立即看到结果。您可以做的是将?refresh=wait_for
附加到您的删除通话中,以确保下一个通话能够获得您期望的正确结果。
请注意,添加此查询字符串参数会稍微延迟您的通话。在最糟糕的情况下,它会在1秒后返回并且是最好的情况,它会立即返回,具体取决于您拨打电话的两次刷新之间的时间。
答案 1 :(得分:0)
如果您使用的是Java客户端,那么您正在寻找API操作的线程。
默认情况下,它是一个单独的线程,它将执行删除操作,除非您明确要求它在提供请求的线程上执行(匹配@Val's的答案)。这样,API调用将一直阻塞,直到操作完成。
DeleteResponse response = client.prepareDelete("documents", "doc", "1")
.setOperationThreaded(false) //look here!!!!
.get();