是否可以使用查询“连接”elasticsearch 中的两个索引

Prz*_*oda 5 aggregation elasticsearch

我知道在elasticsearch中没有加入索引的选项,但我需要找到一种方法来解决这个问题:

我有 2 个索引,如 A、B

IndexA有field1、field2、field3等信息
IndexBfield4、field5、field6

如果我将通过查询字段5(在本例中为“测试”)进行搜索,我希望在树中拥有所有关系,例如:

匹配 IndexA 中与 IndexA 中的“field2”和 IndexB 中的“field5”相匹配的所有文档

例如
IndexA 文档:
5、“test”、“test2”、
10、“test”、“test7”
11、“test10” ,“测试11”

IndexB 文档:
1、“test”、(...)
2、“test”、(...)
3、“test100”、(...)

示例响应:
对于 id5(来自索引 A),我想要一个来自索引 B 的 id 为 1 和 2 的对象,例如 {id:5,响应:{1, 2}}
对于 id10(来自索引 A)我想要一个对象id 的 1 和 2 来自索引 B,例如 id11 的 {id:10,响应:{1, 2}}
没有匹配项(“test10”!=“test”)
{id:11,响应:{}}

也许有什么办法可以解决这个问题吗?最后,我需要对四个索引执行此操作(但如果可以在两个索引之间执行此操作,那么我也可以对 4 个索引执行此操作)。

Tom*_*zyk 2

正如你所说,我认为在elasticsearch中这是不可能的。您不应该创建具有此类关系的索引。最好重新考虑您的模型并对数据进行非规范化。

为了解决这个问题,您必须在后端以编程方式进行处理。伪代码:

//Get all objects from indexA
const allIndexA = indexA.getAll();
const result = new Array();
//For each object in indexA, select the corresponding object in indexB
allIndexA.forEach((entryA) => {
    const entriesB = indexB.get({field5: entryA.field2});
    result.push({
        entryA,
        entriesB
    });
});
Run Code Online (Sandbox Code Playgroud)