我正在使用ES来检索数据,我在ES中更改并更新,然后执行相同的搜索查询 - 看起来我并不总是将更新的文档重新下来并且必须等待一两秒钟。
使用以下代码:
esClient.Update<TESDocModel, TESDocModel>(new DocumentPath<TESDocModel>(docId), u => u.Index(index).Doc(toUpdate).DocAsUpsert(true));
这是正确的行为还是应该在upsertdocument操作完成后立即搜索文档?
这取决于何时执行分片上的刷新操作。索引文档时,无法立即搜索。要进行可搜索的分片上的刷新操作。在幕后写入并打开一个新段,使这些段中包含的文档可以搜索。
默认情况下,弹性每秒刷新一次shard。这就是为什么据说Elasticsearch有近乎实时的搜索。
刷新间隔可以通过索引设置参数refresh_interval
来控制。例如,下面将刷新间隔更改为5秒,并且索引的任何新文档最多需要5秒才能进行搜索。
PUT /my_index
{
"settings": {
"refresh_interval": "5s"
}
}
要了解更多信息,请阅读elasticsearch near real time search。