首页 > 解决方案 > 搜索请求的 Elasticsearch 原子性保证

问题描述

我是 Elasticsearch 的新手,在任何地方都找不到这个问题的答案。所以问题是,ES 是否为 GET 请求提供任何原子性保证,该请求结合了方面搜索和文档多匹配搜索,就像在并行进行大量插入时遵循的那样。

POST shakespeare/_search?request_cache=false
{
  "query": {
        "multi_match" : {
            "query" : "henry"
        }
    },
    "size": 0,
    "aggs": {
    "Speaker Facet": {
      "terms": {
        "field": "speaker",
        "size": 12
      }
    },
    "text entry Facet": {
      "terms": {
        "field": "text_entry.keyword",
        "size": 12
      }
    },
    "play name Facet": {
      "terms": {
        "field": "play_name",
        "size": 12
      }
    }
  }
}

这是一个 2 部分请求 1. 多匹配搜索和 2. 聚合。如果并行进行大量插入,那么 ES 是否保证多重匹配搜索和聚合结果都在相同的数据集上运行并且查询的两个部分的结果相互匹配?或者 ES 是否先进行搜索,然后进行一些插入,然后进行聚合形式,这将显示聚合计数与多匹配搜索不匹配?

标签: elasticsearchelastic-stack

解决方案


无论正在进行的索引请求的频率如何,都可以保证聚合运行在完全相同的文档集上,该文档集已由查询部分中指定的任何约束选择。

否则将是一场噩梦。

文档中:

聚合可以看作是在一组文档上构建分析信息的工作单元。执行的上下文定义了该文档集是什么(例如,顶级聚合在搜索请求的已执行查询/过滤器的上下文中执行)。


推荐阅读