elasticsearch 如果在插入请求后立即发送删除请求,则不会删除文档,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch 如果在插入请求后立即发送删除请求,则不会删除文档,elasticsearch,nest,elasticsearch,Nest" />

elasticsearch 如果在插入请求后立即发送删除请求,则不会删除文档

elasticsearch 如果在插入请求后立即发送删除请求,则不会删除文档,elasticsearch,nest,elasticsearch,Nest,我有一个索引文档的服务。 该服务收到以下两个请求-第一个是插入文档,第二个是删除文档。 当它们之间有一段时间时,它可以正常工作,但当它们一个接一个地发送时,文档不会被删除。 Nest给我的回复看起来很成功 我的函数很长,所以我只在里面写insert和delete。如果需要更多信息,我将添加它(例如,在插入的情况下,还将从所有其他可用索引中删除它,并在需要时插入一些映射) 插入代码: IBulkResponse res = await _client.IndexManyAsync(entities

我有一个索引文档的服务。 该服务收到以下两个请求-第一个是插入文档,第二个是删除文档。 当它们之间有一段时间时,它可以正常工作,但当它们一个接一个地发送时,文档不会被删除。 Nest给我的回复看起来很成功

我的函数很长,所以我只在里面写insert和delete。如果需要更多信息,我将添加它(例如,在插入的情况下,还将从所有其他可用索引中删除它,并在需要时插入一些映射)

插入代码:

IBulkResponse res = await _client.IndexManyAsync(entities, index, type);
删除代码:

var termFilter = new List<Func<QueryContainerDescriptor<JObject>, QueryContainer>>
        {
            c => c.Terms(t => t.Field(ID_FIELD).Terms(ids))
        };

        await _client.DeleteByQueryAsync<JObject>(indices, types, d => d.Query(q => q.Bool(b => b.Must(termFilter))));

版本:ElasticSearch 2.3.5、.Net 4.6、Nest 2.4.6

插入任何文档时,会发生以下步骤:

  • 文档被添加到内存缓冲区并附加到translog
  • 刷新 内存缓冲区中的文档被写入一个新的段,而不需要 fsync

    a。将打开该段以使其对搜索可见

    b。内存缓冲区被清除

  • 将打开该段以使其对搜索可见

  • 每隔一段时间,例如当translog变得太大时,索引就会被删除 脸红;创建新的translog,并执行完全提交:

    a。内存缓冲区中的任何文档都会写入一个新段

    b。缓冲区被清除

    c。提交点被写入磁盘

    d。使用fsync刷新文件系统缓存

    e。旧的翻译日志被删除

  • Elasticsearch不会删除文档,它会将文档标记为已删除文档,并且在合并索引段时,会将已删除的文档保留在内存中

    所以我猜你在删除后缺少了刷新API。 如果您的删除API不太频繁,那么您可以通过调用刷新API在调用删除API后刷新ES。


    如果您想了解更多关于图片后面的索引是如何进行的,您可以参考此链接()

    在这种情况下,删除非常频繁。还有一些情况下,我需要一次删除多个文档。我应该仍然使用刷新api吗?如果没有,我还能做什么?我只是尝试使用刷新api(wait_client.RefreshAsync(new RefreshRequest(index))),但它不能帮助每秒刷新一次。所以你可以把睡眠时间设为1-2秒,如果你的频率低于每秒一个文档,你可以把刷新时间设为1-2秒。但我的建议是让你睡一秒钟。
    var indices = new { "some_index_1", "some_index_2" };
    var entity = new Entity {  Action = ReplicationAction.INSERT, ... };
    await elasticDal.Insert(new List { entity }, "some_index_1", "666", indices);
    entity.Action = ReplicationAction.DELETE;
    await elasticDal.Insert(new List { entity }, "some_index_1", "666", indices);