查找所有嵌套字段中不包含给定用户的文档

时间:2015-11-09 22:53:59

标签: elasticsearch

我有一个名为rating的嵌套字段的以下映射:

"ratings" : {
  "type" : "nested",
  "properties" : {
    "rating" : {
      "type" : "double"
    },
    "user_id" : {
      "type" : "long"
    }
  }
}

我正在尝试查找嵌套字段中不存在user_id的所有记录。

这就是我所拥有的,但是当有多个嵌套文档并且任何文档都不是user_id 1时,它就失败了。

{
"nested": { 
    "path": "ratings", 
    "query": { 
         "bool": { "must_not": [
             { "term": { "ratings.user_id": 1}}
]}}}}

1 个答案:

答案 0 :(得分:0)

如果我正确理解您,并且您要做的是查找没有嵌套文档的文档具有特定user_id的文档,那么此查询似乎可以执行您想要的操作(假设您想要用户2未评级的文档):

POST /test_index/_search
{
   "query": {
      "constant_score": {
         "filter": {
            "not": {
               "filter": {
                  "nested": {
                     "path": "ratings",
                     "filter": {
                        "term": {
                           "ratings.user_id": 2
                        }
                     }
                  }
               }
            }
         }
      }
   }
}

这是我用来测试它的代码:

http://sense.qbox.io/gist/afd319e64403a7f995cbf1e9f40e5c5948729193