elasticsearch - 为什么我在Elastic search中看到已删除的文档

标签 elasticsearch lucene

我有 flex 搜索集群,我一直在使用doc_as_upsert Update api。
我从不叫DeleteApi
但是,如果我在 flex 搜索中看到很多DeletedDocuments指标。
upsert间接调用delete然后插入吗?

最佳答案

ElasticSearch(ES)不支持文档更新,即文档是不可变的,我们无法更改它们。 Update API似乎是在原地更改文档,但实际上Elasticsearch会执行以下操作:

  • 从旧文档
  • 检索JSON
  • 更改文档
  • 删除旧文档
  • 索引新文档

  • 在内部,Lucene(ES是基于Lucene库的搜索引擎)仅在每个段的位集中标记了一点以记录该文档已删除。所有后续搜索仅跳过任何已删除的文档。这种方法是必要的,因为否则更新Lucene的一次写入索引数据结构(如发布列表)的代价将太高。
    您可以在this blog post中了解有关删除的更多信息

    老实说,Lucene支持就地更新,但是此方法只能用于更新单值的非索引和未存储的基于docValue的数字字段,并且仅受Solr支持

    关于elasticsearch - 为什么我在Elastic search中看到已删除的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48573917/

    相关文章:

    java - 精确 PrefixQuery 得分更高

    java - Apache Lucene createWeight() 用于通配符查询

    elasticsearch - 为 SynonymFilterFactory 术语赋予权重

    ruby-on-rails - 对属性的Tire/Elasticsearch过滤

    elasticsearch - 如何对多个字段进行汇总?

    sql - 将简化的 ES 查询结果传递给 SQL

    java - lucene 实现相关性的自定义评分

    python - 映射在Elasticsearch中到底做了什么?

    elasticsearch - 如何在 Elasticsearch 中建议(自动完成)下一个词?

    scala - Spark with Kafka streaming 保存到 Elastic search 性能低下