1

我有一个User像这样的映射:

name: { 
 type: "string"
},
followed_groups: {
  type: "nested",
  properties: {
    created_at: {
      type: "string"
    },
    group_id: {
      type: "string"
    }
  }
},
id: {
  type: "integer"
},
member_of_groups: {
  type: "nested",
  properties: {
    created_at: {
      type: "string"
    },
    group_id: {
      type: "string"
    }
  }
}

而且我想获得关注某个组或该组成员的用户。

每个单独的查询都可以使用嵌套查询,例如:

"query":{
  "nested":{
    "query":{
      "terms":{
        "followed_groups.group_id":[
          "22"
        ]
      }
    },
    "path":"followed_groups"
  }
}

但是我找不到将两者与OR条件结合起来的方法。请问有可能吗?

4

1 回答 1

1

在我看来,您并不关心使用查询提供的评分,请参阅下面的使用过滤器的解决方案。

可以简单地使用您在 should 指令的查询数组中给出的查询指令:

{ "query" : {
  "bool" : {
    "should" : [
      {
        "query" : {
          "nested" : {
            "query" : {
              "terms" : {
                "followed_groups.group_id" : [
                  "22"
                ]
              }
            },
            "path" : "followed_groups"
          }
        }
      },
      {…}
    ]
  }
}}

可以在顶层使用过滤器,但是在使用 faceting 时效果不佳,所以我将在这里使用过滤查询:

{
  "query": {
    "filtered" : {
        "query" : { "match_all" : {} },
        "filter" :{   "or" : [
          {
            "nested":{
               "query":{
                 "terms":{
                   "followed_groups.group_id":[
                     "22"
                   ]
                 }
               },
               "path":"followed_groups"
             }
           },
           {…}
        ]
      }
    }
  }
}

我没有对此进行测试,但这至少应该为您的查询提供正确的结构。

于 2013-09-06T09:54:21.467 回答