gpt4 book ai didi

elasticsearch - 是否有与Elasticsearch中的联接类似的查询?

转载 作者:行者123 更新时间:2023-12-02 23:23:28 24 4
gpt4 key购买 nike

我知道在Elasticsearch中使用“JOIN”效率不高,但是我需要使用它。
我必须通过找到索引A和索引B的相同字段来提取值。
下面有一个例子。

A/type1/1
{
“serial”:“abc”,
“member”:“jack”
}

A/type1/2
{
“serial”:“def”,
“member”:“jack”
}

B/type2/1
{
“serial”:“abc”,
“temp”:1
}

B/type3/2
{
“serial”:“abc”,
“water”:0
}

B/type2/3
{
“serial”:“def”,
“temp”:10
}

我需要过滤A索引的``member''字段的值以找到对应的 serial,然后我想获取B索引中 tempwater字段的值。
例如)过滤器: {“member”:“jack”} ===> temp:1, water:0, temp:10
我想知道是否可以得到此结果,如果可以,如何建立数据结构(索引结构)。

最佳答案

如果可能的话,您绝对应该执行评论者Val的建议,对数据进行非规范化(扁平化)。我建议,例如,您可以使用这样的文档(基本上,在索引之前进行联接):

B/type2/1 {"serial": "abc", "temp": 1, "member": "jack"}
B/type2/2 {"serial": "abc", "water": 0, "member": "jack"}
B/type2/3 {"serial": "def", "temp": 10, "member": "jack"}

然后,如果您搜索{"match": {"member": "jack"}},您将获得所有这些文档。在Elasticsearch中,有两种方法可以执行类似“joins”的操作,即parent-child relationshipsnested objects。这是如何使用嵌套对象创建映射的示例:
{
"type1": {
"properties": {
"serial": {"type": "keyword"},
"member": {"type": "keyword"},
"type2s": {
"type": "nested",
"properties": {
"temp": {"type": "integer"},
"water": {"type": "integer"}
}
}
}
}
}

然后,您将存储如下记录:
{
"serial": "abc",
"member": "jack",
"type2s": [
{
"temp": 1
},
{
"water": 0
}
}
}

但是,我强烈建议您除非绝对必要,否则不要这样做!一个好主意的用例很少见。它使查询数据变得更加复杂,并且效率低下(因此,随着数据规模的扩大,您将更快地遇到问题)。

我知道“复制”数据感觉不对。在关系数据库中,这将是一个可怕的做法。为了在Elasticsearch中进行有效的数据建模,您确实必须开发出不同的思维方式,其中的区别之一是您不必为复制数据而过分担心。

关于elasticsearch - 是否有与Elasticsearch中的联接类似的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45994672/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com