elasticsearch - Elasticsearch :带有父和子条件的嵌套查询

标签 elasticsearch

我有2个示例记录,如下所示:

{
    "parents": [
      {
        "child": [
          {
            "is_deleted": false,
            "child_id": -1,
            "timestamp": 1483536052232
          }
        ],
        "parent_id": 810
      },
      {
        "child": [
          {
            "is_deleted": true,
            "child_id": 105,
            "timestamp": 1483537567000
          }
        ],
        "parent_id": 42
      }
    ]
},
{
  "parents": [
      {
        "child": [
          {
            "is_deleted": false,
            "child_id": 105,
            "timestamp": 1483537567000
          }
        ],
        "parent_id": 42
      }
    ]
}

和我的映射:
"properties": {
  "parents": {
    "type": "nested",
    "properties": {
      "parent_id": {
        "type": "integer",
        "doc_values": false
      },
      "child": {
        "type": "nested",
        "properties": {
          "is_deleted": {
            "type": "boolean",
            "doc_values": false
          },
          "child_id": {
            "type": "integer",
            "doc_values": false
          },
          "timestamp": {
            "type": "long",
            "doc_values": false
          }
        }
      }
    }
  }

我想按至少有一个is_deleted作为false的 child 的 parent ID搜索。例如,如果我将查询父ID为42,则我应该只获取第二个文档,而不是第一个。

最佳答案

您应该使用嵌套查询来查询嵌套字段。

这是一个示例,但是我不知道这是否是最好的解决方案,至少它是可行的:

POST /test1/test/_search
{
   "query": {
      "nested": {
         "path": "parents",
         "query": {
            "bool": {
               "must": [
                  {
                     "match": {
                        "parents.parent_id": 42
                     }
                  },
                  {
                     "nested": {
                        "path": "parents.child",
                        "query": {
                           "term": {
                              "parents.child.is_deleted": "F"
                           }
                        }
                     }
                  }
               ]
            }
         }
      }
   }
}

关于elasticsearch - Elasticsearch :带有父和子条件的嵌套查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41466149/

相关文章:

elasticsearch - 没有聚合的 Kibana 简单图

ruby-on-rails - ElasticSearch getopt:找不到命令解析参数时出错

elasticsearch:重命名查询的输出字段

elasticsearch - 隐藏 ES 响应中的公共(public)字段

rss - 在关系数据库之前将记录放入 Elasticsearch 索引

python - For循环仅使用python迭代列表中的一个对象

groovy - Elasticsearch-geo_point数组上运行distanceInKm的MissingMethodException

ruby-on-rails - 如何在Rails 4中使用Lucene/Solr?

amazon-web-services - Docker容器启动后立即退出

elasticsearch - sbt 无法解析来自 sonatype 快照的依赖关系