2013-05-30 35 views
5

Tôi đang sử dụng tài liệu lồng nhau trong ES. Tôi có mảng lồng nhau bên trong một thực thể và tôi muốn có thể lọc mảng với truy vấn lồng nhau (không chỉ lọc root/parent doc mà còn cả mảng lồng nhau).Làm thế nào để lọc mảng lồng nhau trong phản ứng?

Bộ lọc lồng nhau cho phép lọc tài liệu gốc. Ví dụ: nếu tôi có chỉ mục 'blog' và nhập 'blog' và bên trong tài liệu blog, tôi có 'nhận xét' thuộc tính (mảng nhận xét), với {"type": "lồng nhau"} trong ánh xạ, Vì vậy, ví dụ: tôi muốn để lọc các blog có nhận xét có tiêu đề như 'hôm nay' (ví dụ với truy vấn đối sánh) nhưng trong mỗi blog tôi cũng muốn chỉ hiển thị các nhận xét chứa 'hôm nay' trong tiêu đề.

Tôi biết cách sắp xếp bộ lọc lồng nhau. Mối quan hệ giữa cha mẹ và con không tốt cho mục đích này vì không có tài liệu con nào đáp ứng như một phần của tài liệu gốc.

Có cách nào để thực hiện việc này trực tiếp trong elasticsearch, mà không thêm logic bổ sung vào ứng dụng, điều này có thể ảnh hưởng đến hiệu suất không? Hoặc là có và có kế hoạch để thêm này như là tùy chọn mới trong truy vấn lồng nhau/bộ lọc trong các phiên bản tiếp theo hoặc một cái gì đó tương tự?

Cảm ơn

... thêm

Ví dụ, có một cái nhìn tại doc này:

 
..... 
"blogs" :[ 
    { 
     "id":1000, 
     "content":"hello world!!!", 
     "author:"evan", 
     "createTime":"2013-05-31", 
      "comments" : [ 
        {"author":"jack", id:"1", "content":"test test","createTime":"2013-05-31"}, 
        {"author":"tom", id:"2", "content":"test test","createTime":"2013-05-30"}, 
        {"author":"oliver", id:"3", "content":"test test","createTime":"2013-05-30"}, 
        {"author":"Jonesie", id:"4", "content":"test test","createTime":"2013-05-29"} 
      ] 
    }, 
    { 
     "id":1001, 
     "content":"test data", 
     "author:"jack", 
     "createTime":"2013-05-30", 
      "comments" : [ 
        {"author":"Zach", id:"11", "content":"test data 1","createTime":"2013-05-31"}, 
        {"author":"tom", id:"21", "content":"test data 2","createTime":"2013-05-31"}, 
        {"author":"oliver", id:"31", "content":"test test 3","createTime":"2013-05-28"}, 
        {"author":"Jonesie", id:"41", "content":"test test 4","createTime":"2013-05-27"} 
      ] 
    } 
] 
..... 

Tôi muốn chạy truy vấn như:

lọc theo blog. createTime == '2013-05-31' và lọc blogs.comments.createTime == '2013-05-31'

mong đợi:

 
..... 
"blogs" :[ 
    { 
     "id":1000 
     "content":"hello world!!!", 
     "author::"evan", 
     "createTime":"2013-05-31" 
      "comments" : [ 
        {"author":"jack", id:"1", "content":"test test","createTime":"2013-05-31"} 
      ] 
    } 
] 
.... 

nhờ

+1

Bạn có thể thêm một số dữ liệu thử nghiệm vào câu hỏi của mình không? Nó không hoàn toàn rõ ràng như thế nào cấu trúc dữ liệu của bạn trông như thế nào. – imotov

Trả lời