2014-09-20 20 views
5

Tôi đang cố sử dụng bộ lọc truy vấn lồng nhau bên trong tập hợp lồng nhau, bộ lọc. Khi tôi làm như vậy, tập hợp trả về không có mục nào. Nếu tôi thay đổi truy vấn thành một bộ lọc match_all cũ đơn giản, tôi sẽ nhận lại các mục trong nhóm.Truy vấn lồng nhau trong lồng nhau, tập hợp bộ lọc không thành công

Đây là một phiên bản đơn giản của ánh xạ Tôi đang làm việc với:

"player": { 
    "properties": { 
    "rating": { 
     "type": "float" 
    }, 
    "playerYears": { 
     "type": "nested", 
     "properties": { 
     "schoolsOfInterest": { 
      "type": "nested", 
      "properties": { 
      "name": { 
       "type": "string", 
       "index": "not_analyzed" 
      } 
      } 
     } 
     } 
    } 
    } 
} 

Truy vấn này, với một bộ lọc match_all trên việc tổng hợp:

GET /players/_search 
{ 
    "size": 0, 
    "aggs": { 
    "rating": { 
     "nested": { 
     "path": "playerYears" 
     }, 
     "aggs": { 
     "rating-filtered": { 
      "filter": { 
       "match_all": {} 
      }, 
      "aggs": { 
      "rating": { 
       "histogram": { 
       "field": "playerYears.rating", 
       "interval": 1 
       } 
      } 
      } 
     } 
     } 
    } 
    }, 
    "query": { 
    "filtered": { 
     "filter": { 
     "match_all": {} 
     } 
    } 
    } 
} 

trả về như sau:

{ 
    "took": 16, 
    "timed_out": false, 
    "_shards": { 
     "total": 5, 
     "successful": 5, 
     "failed": 0 
    }, 
    "hits": { 
     "total": 167316, 
     "max_score": 0, 
     "hits": [] 
    }, 
    "aggregations": { 
     "rating": { 
     "doc_count": 363550, 
     "rating-filtered": { 
      "doc_count": 363550, 
      "rating": { 
       "buckets": [ 
        { 
        "key_as_string": "-1", 
        "key": -1, 
        "doc_count": 20978 
        }, 
        { 
        "key_as_string": "0", 
        "key": 0, 
        "doc_count": 312374 
        }, 
        { 
        "key_as_string": "1", 
        "key": 1, 
        "doc_count": 1162 
        }, 
        { 
        "key_as_string": "2", 
        "key": 2, 
        "doc_count": 12104 
        }, 
        { 
        "key_as_string": "3", 
        "key": 3, 
        "doc_count": 9558 
        }, 
        { 
        "key_as_string": "4", 
        "key": 4, 
        "doc_count": 5549 
        }, 
        { 
        "key_as_string": "5", 
        "key": 5, 
        "doc_count": 1825 
        } 
       ] 
      } 
     } 
     } 
    } 
} 

Nhưng truy vấn này có bộ lọc lồng nhau trong tập hợp, trả về một nhóm trống:

GET /players/_search 
{ 
    "size": 0, 
    "aggs": { 
    "rating": { 
     "nested": { 
     "path": "playerYears" 
     }, 
     "aggs": { 
     "rating-filtered": { 
      "filter": { 
       "nested": { 
       "query": { 
        "match_all": {} 
       }, 
       "path": "playerYears.schoolsOfInterest" 
      } 
      }, 
      "aggs": { 
      "rating": { 
       "histogram": { 
       "field": "playerYears.rating", 
       "interval": 1 
       } 
      } 
      } 
     } 
     } 
    } 
    }, 
    "query": { 
    "filtered": { 
     "filter": { 
     "match_all": {} 
     } 
    } 
    } 
} 

xô rỗng:

{ 
    "took": 8, 
    "timed_out": false, 
    "_shards": { 
     "total": 5, 
     "successful": 5, 
     "failed": 0 
    }, 
    "hits": { 
     "total": 167316, 
     "max_score": 0, 
     "hits": [] 
    }, 
    "aggregations": { 
     "rating": { 
     "doc_count": 363550, 
     "rating-filtered": { 
      "doc_count": 0, 
      "rating": { 
       "buckets": [] 
      } 
     } 
     } 
    } 
} 

Có thể sử dụng bộ lọc lồng bên trong lồng nhau, quy tụ lọc? Có một lỗi được biết đến trong elasticsearch về điều này? Bộ lọc lồng nhau hoạt động tốt trong ngữ cảnh truy vấn của tìm kiếm và nó hoạt động tốt nếu tôi không sử dụng tập hợp lồng nhau.

+0

bạn có thể thử phần sau trong tập hợp bộ lọc lồng nhau không? "Aggs": { "giá-lọc": { "bộ lọc": { "lồng": { "bộ lọc": { "match_all": {}} , "con đường": "playerYears.schoolsOfInterest " } }, –

+0

Chỉ là thay đổi từ truy vấn đến bộ lọc? Nếu vậy, tôi đã thử nó, và không có súc sắc. vẫn không có kết quả: ( – Bennidhamma

+0

bạn có thể vui lòng cung cấp một số tài liệu mẫu? –

Trả lời

11

Dựa trên thông tin được cung cấp và một vài giả định, tôi muốn cung cấp hai đề xuất. Tôi hy vọng nó giúp giải quyết vấn đề của bạn.

Trường hợp 1: sử dụng ngược lại tập hợp lồng nhau:

{ 
    "size": 0, 
    "query": { 
    "match_all": {} 
    }, 
    "aggs": { 
    "rating": { 
     "nested": { 
     "path": "playerYears.schoolsOfInterest" 
     }, 
     "aggs": { 
     "rating-filtered": { 
      "filter": { 
      "match_all": {} 
      }, 
      "aggs": { 
      "rating_nested": { 
       "reverse_nested": {}, 
       "aggs": { 
       "rating": { 
        "histogram": { 
        "field": "rating", 
        "interval": 1 
        } 
       } 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 

Trường hợp 2: thay đổi để hợp lọc:

{ 
    "size": 0, 
    "aggs": { 
    "rating-filtered": { 
     "filter": { 
     "nested": { 
      "query": { 
      "match_all": {} 
      }, 
      "path": "playerYears.schoolsOfInterest" 
     } 
     }, 
     "aggs": { 
     "rating": { 
      "histogram": { 
      "field": "playerYears.rating", 
      "interval": 1 
      } 
     } 
     } 
    } 
    }, 
    "query": { 
    "filtered": { 
     "filter": { 
     "match_all": {} 
     } 
    } 
    } 
} 

tôi sẽ đề nghị bạn sử dụng trường hợp 1 và xác minh yêu cầu của bạn các kết quả.

+0

Tôi nghĩ điều này sẽ hoạt động !! – Bennidhamma

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