2011-11-29 24 views
7

Tôi có một truy vấn mà trông như thế này:Query DSL - Sự hiểu lầm của các bộ lọc

{ 
    "query": { 
    "constant_score": 
     "filter": { 
     "missing": { 
      "field": "parent_id" 
     } 
     } 
    } 
}, 
"size": limit, 
"from": offset 
} 

loại của tôi có một và một lĩnh vực parent_idwall_id. Làm thế nào tôi có thể sửa đổi truy vấn này để tôi có thể nhận được tất cả các loại không có parent_id và không có wall_id? Tôi không thể giải mã nó từ các tài liệu. Cảm ơn bạn đã giúp đỡ!

CẬP NHẬT

Tôi có truy vấn sau đây mà làm việc, nhưng tôi không thích catchall query vào tiêu đề. Có cách nào để làm điều này mà không cần phải thêm một "catchall

{ 
    "query":{ 
    "filtered":{ 
    "query":{ 
     "field":{ "title":"*" } 
    }, 
    "filter":{ 
     "and":{ 
      "filters":[ 
       { 
       "missing":{ "field":"parent_id" } 
       }, 
       { 
       "missing":{ "field":"wall_id" } 
       } 
      ] 
     } 
    } 
    } 
}, "size":10, "from":0 
} 

Trả lời

7

Bạn sắp thực hiện, bạn chỉ cần sử dụng bộ lọc and dưới constant_score truy vấn của bạn:

{ 
    "query": { 
    "constant_score": { 
     "filter": { 
     "and":[ 
      { "missing":{ "field":"parent_id" }}, 
      { "missing":{ "field":"wall_id" }} 
     ] 
     } 
    } 
    } 
} 
+0

Wow, đó là Tôi đã phải thêm dấu ngoặc nhọn xung quanh "bộ lọc" tài sản, nhưng nó hoạt động.Cảm ơn BTW, định dạng này là như vậy khó tính, là có một nguồn tài liệu tốt sang một bên các tài liệu elasticsearch.org – swatkins

+0

Rất tiếc, cảm ơn Không có tài nguyên nào khác mà tôi biết, nhưng bạn có thể muốn xem các trang trình bày cho bản trình bày mà tôi đã đưa ra: http://www.elasticsearch.org/tutorials/2011/08/28/ query-dsl-explain.html Ngoài ra, tôi không biết khách hàng nào bạn đang sử dụng để nói chuyện với ES, nhưng nếu bạn quen thuộc với Perl, hãy xem SearchBuilder, một Perl nhỏ gọn hơn 'Cú pháp ish được dịch thành truy vấn ES tiêu chuẩn dsl: https://metacpan.org/module/ElasticSearch::SearchBuilder – DrTech

+0

Tôi đang sử dụng node.js và mô-đun elasticsearchclient. Đó là một trợ giúp tuyệt vời. Cảm ơn! – swatkins

Các vấn đề liên quan