我在Elasticsearch中有两个索引,一个system
索引和一个telemetry
索引。我想使用系统索引中的过滤器对遥测索引执行查询和聚合。系统索引相对较小,偶尔仅接收新文档,但是遥测索引却要大得多,并且不断接收新文档。这似乎是使用application-side join的理想情况。
我尝试在上一个链接上模拟示例查询,但事实证明filtered
查询是deprecated as of ES 5.0。 (为什么在当前文档中有此示例?!)
这是我的查询:
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
,因为由于某种原因,它不喜欢“fields”之后的[]字符。谁能提供使用应用程序侧联接的简单示例?
定义了此类查询后(也许在Kibana的Dev Tools控制台中),是否可以在Kibana中将其可视化?
最佳答案
使用Elastic无法像在关系数据库中那样执行两个嵌套查询,第一个查询使用第二个查询的响应。 application-side join中的示例意味着您实际上是在应用程序端进行两个查询(两个不同的 flex 请求)。
当systemId的值不超过1024个时,此方法有效。因为术语查询对术语数量有限制。
由于此查询不可行,因此您无法在kibana中对其进行可视化。
在这种情况下,您必须牺牲一点空间,并将systemId添加到映射中。
祝好运!
关于elasticsearch - 应用程序侧加入Elasticsearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52820201/