gpt4 book ai didi

Elasticsearch - 查询嵌套对象

转载 作者:行者123 更新时间:2023-11-29 02:53:07 25 4
gpt4 key购买 nike

我像这样在 elasticsearch 中存储对象

{
"user":{
"name":"Johnson",
"age":24
}
}

请注意,我没有在 elasticsearch 中设置默认映射。我只是直接插入数据。

现在,同时使用“嵌套查询”尝试查询数据。

GET user_index/user_document/_search
{

"query":{
"nested" : {
"path" : "user",
"score_mode" : "avg",
"query" : {
"bool" : {
"must" : [
{
"match" : {"user.name" : "Johnson"}
}
]
}
}
}
}
}

这失败了,我得到一个错误

路径 [user] 下的嵌套对象不是嵌套类型

我的问题是

  1. 我应该为查询嵌套对象创建默认映射吗?
  2. 为什么不能改用下面这样的查询(有效)?

    GET user_index/_search
    {

    "query":{

    "match":{

    "user.name":"Johnson"

    }

    }

    }

最佳答案

Should i create a default mapping for querying nested objects?

没有。当您要将许多对象放入数组并需要单独查询它们时,会使用 ES 中的嵌套对象。作为一般规则,在您发现确实需要它们之前不要创建嵌套对象。在大多数情况下,它们对您的伤害比对您的帮助更多。

Why can't a query like this below (which works) be used instead?

  1. ES 将所有内容小写以方便搜索。
  2. 在查询整个值时,您还应该使用“term”查询。

这是给你的示例:

PUT test

POST test/index1
{
"user":{
"name":"Johnson",
"age":24
}
}

GET test/index1/_search
{
"query": {
"term": {
"user.name": {
"value": "johnson"
}
}
}
}

关于Elasticsearch - 查询嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32506110/

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