Các bộ lọc của tôi được nhóm lại với nhau thành các danh mục. Tôi muốn truy xuất tài liệu trong đó tài liệu có thể khớp với bất kỳ bộ lọc nào trong một danh mục, nhưng nếu hai (hoặc nhiều) danh mục được đặt thì tài liệu phải khớp với bất kỳ bộ lọc nào trong TẤT CẢ các loại.Làm cách nào để thực hiện các bộ lọc lồng nhau AND và OR trong Tìm kiếm Đàn hồi?
Nếu viết bằng pseudo-SQL nó sẽ là:
SELECT * FROM Documents WHERE (CategoryA = 'A') AND (CategoryB = 'B' OR CategoryB = 'C')
Tôi đã thử các bộ lọc lồng nhau như vậy:
{
"sort": [{
"orderDate": "desc"
}],
"size": 25,
"query": {
"match_all": {}
},
"filter": {
"and": [{
"nested": {
"path":"hits._source",
"filter": {
"or": [{
"term": {
"progress": "incomplete"
}
}, {
"term": {
"progress": "completed"
}
}]
}
}
}, {
"nested": {
"path":"hits._source",
"filter": {
"or": [{
"term": {
"paid": "yes"
}
}, {
"term": {
"paid": "no"
}
}]
}
}
}]
}
}
Nhưng rõ ràng là tôi không hoàn toàn hiểu được cú pháp ES. Điều này có đúng hay tôi cần sử dụng một bộ lọc khác?
không phải là câu trả lời cho câu hỏi: '' hoặc'' với '' term'' có thể được thực hiện dễ dàng hơn với [terms] (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-terms- filter.html). và mặc định cho [bool] (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-bool-filter.html) là '' và''. một cái gì đó dọc theo '' filter.bool.must: [{terms: progress: ["not complete", "complete"]}. {terms: paid: ["yes", "no"]}] '' có thể hoạt động? – cfrick
truy vấn lồng nhau/bộ lọc được sử dụng cho mảng/danh sách (phụ thuộc vào ngôn ngữ bạn quen thuộc với ví dụ: 'a = [{'b': 1}, {'c': 2}])'. Bạn có thể viết một ví dụ về một trong các tài liệu của bạn không? Điều đó sẽ giúp – Diolor
cfrick đã dẫn tôi đi đúng hướng. Tôi lồng nhau một loạt các bộ lọc 'điều khoản' bên trong một bộ lọc 'và', và nó dường như đáp ứng nhu cầu của tôi. – MHTri