elasticsearch - 如何创建在结果中包含嵌套数据的Elasticsearch查询

标签 elasticsearch nested

我需要从包含嵌套数据的elasticsearch查询中获取数据。
数据源设置为true。添加“字段”

"fields":["*"],
"query": {
...

返回根级别的所有数据。

但是我需要获取嵌套文档(实际上是嵌套文档)中的数据。
与_source和具有嵌套对象ref的字段一起玩
"fields":["products.envs.title"],

但到目前为止没有喜悦。
任何人都对如何获取此数据作为查询的任何想法。
查询包括聚合,返回的很好,但还需要将嵌套数据作为结果的一部分,以便我可以检查标志并根据标志返回数据以进行调用。

最佳答案

您尚未指定映射和对象结构,因此我创建了自己的映射,如下所示:

POST /so/so/1
{
   "id": 1,
   "user": {
      "name": "adam",
      "role": {
         "code": "admin"
      }
   }
}

现在,让我们尝试使用fields参数查询数据并削减返回结果。
查询:
POST /so/so/_search
{
   "fields": [
      "id",
      "user.role.code"
   ],
   "query": {
      "match_all": {}
   }
}

结果:
"hits": {
      "total": 1,
      "max_score": 1,
      "hits": [
         {
            "_index": "so",
            "_type": "so",
            "_id": "1",
            "_score": 1,
            "fields": {
               "user.role.code": [
                  "admin"
               ],
               "id": [
                  1
               ]
            }
         }
      ]
   }

如您所见,一切工作正常。问题将是,如果您想告诉您要返回整个对象,例如“user”或“user.role”,则将收到“字段[X]不是叶字段”异常。唯一的解决方案是停止使用fields参数,并开始使用_source参数剪切数据-此处描述了此问题:https://github.com/elastic/elasticsearch/issues/4888。另外,不建议使用fields参数,您应始终使用_source参数,如下所示。
查询:
POST /so/so/_search
{
   "_source": [
      "id",
      "user.role.code"
   ],
   "query": {
      "match_all": {}
   }
}

响应:
 "hits": {
      "total": 1,
      "max_score": 1,
      "hits": [
         {
            "_index": "so",
            "_type": "so",
            "_id": "1",
            "_score": 1,
            "_source": {
               "id": 1,
               "user": {
                  "role": {
                     "code": "admin"
                  }
               }
            }
         }
      ]
   }

关于elasticsearch - 如何创建在结果中包含嵌套数据的Elasticsearch查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37675720/

相关文章:

python - Python中的递归循环函数

elasticsearch - Elasticsearch将模糊匹配与地理距离分类相结合

lucene - Elasticsearch - 结合常规查询和 function_score 时如何规范化分数?

elasticsearch - 带有大写 token 的Elasticsearch word_delimiter过滤器不匹配

MySQL, Select inside Select Distinct返回多个值

c# - 如何使用 JSON.NET 创建具有嵌套值数组的 JSON 字符串?

elasticsearch - ElasticSearch嵌套查询按数组中的第二项过滤

c# - 从C#Elasticsearch NEST转换后,您能否看到JSON查询的外观?

elasticsearch - Elasticsearch:请求[/some index/_refresh]包含无法识别的参数:[refresh]

c++ - 我如何创建结构的结构等。嵌套多个结构?