2017-01-04 124 views
0

使用嵌套查詢和條件我有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 
      } 
     } 
     } 
    } 
    } 

我想它有父ID搜索至少有一個is_deletedfalse的孩子。例如,如果我將用父ID 42進行查詢,我應該只有第二個文檔不是第一個。

+0

能否請你澄清什麼是父親和父母,我真的不能猜你的意思是什麼,你的兩份文件根本不相似? – Artholl

+0

對不起,這是錯字。父母是用戶,孩子是由他添加的文件。 –

回答

1

您應該使用嵌套查詢來查詢嵌套字段。

下面是一個例子,但我不知道這是它至少是一個工作一個最好的解決方案:

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" 
          } 
         } 
        } 
        } 
       ] 
      } 
     } 
     } 
    } 
}