如何在Elasticsearch中进行联接查询?

时间:2019-02-19 09:51:11

标签: elasticsearch elasticsearch-6

我在进行ES联接查询时遇到了困难,我在Google上搜索了很多,但没有任何帮助。所以我问这里。

1。映射

我有2个索引,其映射为:

索引日志的映射:

"logs": {
        "properties": {
            "timestamp": {"type": "date"},
            "host": {"type": "keyword"},
            "log": {"type": "text"}

}

映射索引版本:

"versions": {
        "properties": {
            "host": {"type": "keyword"},
            "version": {"type": "keyword"}

}

2。样本数据

假设我有这样的数据:

日志数据:

timestamp:1, host:a1, log: "sample log1"
timestamp:2, host:a1, log: "sample log2"
timestamp:3, host:a1, log: "sample log3"
timestamp:1, host:a2, log: "sample log4"
timestamp:2, host:a2, log: "sample log5"
timestamp:3, host:a2, log: "sample log6"
timestamp:1, host:a3, log: "sample log7"
timestamp:2, host:a3, log: "sample log8"
timestamp:3, host:a3, log: "sample log9"

版本数据:

host:a1, version:v1
host:a2, version:v1
host:a3, version:v2

3。目的和预期结果

我要查询的是: “找出主机版本等于v1的所有日志”

结果应为:

timestamp:1, host:a1, log: "sample log1"
timestamp:2, host:a1, log: "sample log2"
timestamp:3, host:a1, log: "sample log3"
timestamp:1, host:a2, log: "sample log4"
timestamp:2, host:a2, log: "sample log5"
timestamp:3, host:a2, log: "sample log6"

我应该怎么做?请帮忙。

1 个答案:

答案 0 :(得分:1)

Elasticsearch不是关系数据库,因此不支持联接。

解决此问题的唯一方法有很多弊端,是使用parent-child(或v6中的join data type)或nested docs

**这两个选项都无法扩展,可能会引入性能问题。