ES 5.4 - 嵌套查询和空结果

时间:2017-07-03 15:29:21

标签: elasticsearch

我开始使用ES而且我很难接受嵌套查询的概念。 我想根据以下条件过滤我博客帖子的嵌套评论

  • 仅返回尊重查询的嵌套元素
  • 如果没有嵌套结果,则必须返回父级。

目标是在没有未经验证的评论的情况下返回所有帖子。

我的映射

GET _mapping


{  
   "post":{  
      "mappings":{  
         "post":{  
            "properties":{  
               "id":{  
                  "type":"integer"
               },
               "comments":{  
                  "type":"nested",
                  "include_in_parent":true,
                  "properties":{  
                     "content":{  
                        "type":"text"
                     },
                     "is_valid":{  
                        "type":"integer",
                     }
                  }
               }
            }
         }
      }
   }
}

当前文件

GET _search


{
  "_shards": {
    "total": 1,
    "successful": 1,
    "failed": 0
  },
  "hits": {
    "total": 3,
    "max_score": 1,
    "hits": [
      {
        "_type": "post",
        "_id": "1",
        "_score": 1,
        "_routing": "1",
        "_source": {
          "id": "1",
          "comments": [
            {
              "id": "1",
              "content": "Lorem ipsum dolor sit amet.",
              "is_valid" : 1
            },
            {
              "id": "2",
              "content": "Lorem ipsum dolor sit amet.",
              "is_valid" : 0
            },
          ]
        },
        {
          "id": "2",
          "comments": [
            {
              "id": "3",
              "content": "Lorem ipsum dolor sit amet.",
              "is_valid" : 0
            }
          ]
        },
        {
          "id": "3",
        },
      }
    ]
  }
}

当前查询

GET _search
{
  "query": {
    "bool": {
      "should": [
        {
          "nested": {
            "path": "comments",
            "query": {
                 "match" : { "comments.is_valid" : 1 }

            },
            "inner_hits": {}
          }
        },
        {
          "bool": {
            "must_not": {
              "exists": {
                "field": "comments"
              }
            }
          }
        }
      ]
    }
  }
}

因此,通过此查询,我可以在 inner_hits 字段中检索发布#1 而没有无效评论,发布#3 因为他没有评价。

但我不知道如何获得帖子#2 ,他只有一个无效评论且此查询不匹配。

你会如何解决这个问题?

谢谢:)

0 个答案:

没有答案