应用程序侧加入Elasticsearch

时间:2018-10-15 15:37:23

标签: elasticsearch join kibana

我在Elasticsearch中有两个索引,一个system索引和一个telemetry索引。我想使用系统索引中的过滤器对遥测索引执行查询和聚合。系统索引相对较小,偶尔仅接收新文档,但是遥测索引要大得多,并且会不断接收新文档。这似乎是使用application-side join的理想情况。

我尝试在上一个链接上模拟示例查询,但事实证明filtered查询是deprecated as of ES 5.0。 (为什么在 current 文档中有此示例?!)

这是我的疑问:

GET /system/_search
{
  "query": {
    "match": {
      "name": "George's system"
    }
  }
}

GET /telemetry/_search
{
  "query": {
    "bool":{
      "must": {
        "multi_match": {
          "operator": "and",
          "fields": ["systemId"]
          , [1] }  
        }
      }
    }
  }
}

第二个以json_parse_exception失败,因为某种原因,它不喜欢“字段”后的[]字符。

任何人都可以提供使用应用程序侧联接的简单示例吗?

一旦定义了这样的查询(也许在Kibana的Dev Tools控制台中),是否可以在Kibana中将其可视化?

1 个答案:

答案 0 :(得分:0)

使用弹性,无法像关系数据库中那样执行两个嵌套查询,其中第一个查询使用第二个查询的响应。 application-side join中的示例意味着您实际上是在应用程序端进行两个查询(两个不同的弹性请求)。

  1. 第一个查询是您需要过滤的ID列表。
  2. 第二个查询,您将获得的ID列表传递给术语过滤器。

当systemId的值不超过1024个时,此方法有效。因为字词查询对字词数量有限制。

由于该查询不可行,因此您无法在kibana中将其可视化。

在这种情况下,您必须牺牲一点空间并将systemId添加到映射中。

祝你好运!