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

标签 elasticsearch nest

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

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

插入代码:

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))));

例如,此集成测试不起作用:
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);

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

最佳答案

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

  • 文档被添加到内存缓冲区并附加到 translog。
  • 刷新
    内存缓冲区中的文档被写入一个新的段,没有
    一个 fsync。

    一种。该段被打开以使其对搜索可见。

    湾内存缓冲区被清除。
  • 该段被打开以使其对搜索可见。
  • 每隔一段时间——比如当 translog 变得太大时——索引是
    酡;创建一个新的 translog,并执行完整的提交:

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

    湾缓冲区被清除。

    C。提交点被写入磁盘。

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

    e.旧的 translog 被删除。

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

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

    如果你想了解更多关于图片背后的索引是如何发生的,你可以引用这个链接 (https://www.elastic.co/guide/en/elasticsearch/guide/current/translog.html)

    关于elasticsearch - 如果在插入请求后立即发送删除请求,则不会删除文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45955221/

    相关文章:

    sql - 需要帮助来优化可能出错的空间 SQL 查询

    rest - Elasticsearch/Logstash

    c# - 如何在NEST中进行 Assets 汇总和/或组合?

    c# - 使用 elasticsearch 和 NEST 在集合中搜索匹配项

    elasticsearch - Elasticsearch查询过滤器组合问题

    elasticsearch - IP的前三个八位字节上的术语汇总

    elasticsearch - ElasticSearch日期范围查询不适用于自定义日期格式

    elasticsearch - 使用自定义分析器时如何查看分析的文本?

    elasticsearch - ElasticSearch中的实用分析和搜索策略用例

    c# - Nest Elasticsearch 搜索空值