2016-01-15 65 views
0

我正在做一個Elasticsearch查詢並遇到了缺失的aggs問題。Elasticsearch missing aggs

如果我做下面的查詢我得到的AGGS回來沒有問題:

{ 
    "query": { 
    "filtered": { 
     "query": { 
     "query_string": { 
      "query": "*wet*", 
      "fields": [ 
      "Name", 
      "Summary", 
      "Description", 
      "Location", 
      "Features", 
      "TypeName", 
      "CategoryName" 
      ] 
     }, 
     "filter": { 
      "term": { 
      "TypeID": "13" 
      } 
     } 
     } 
    } 
    }, 
    "aggs": { 
    "type": { 
     "terms": { 
     "field": "TypeID" 
     } 
    }, 
    "category": { 
     "terms": { 
     "field": "CategoryID" 
     } 
    }, 
    "max_price": { 
     "max": { 
     "field": "Price" 
     } 
    }, 
    "min_price": { 
     "min": { 
     "field": "Price" 
     } 
    }, 
    "filter-type": { 
     "term": { 
     "TypeID": "13" 
     } 
    } 
    }, 
    "from": 0, 
    "size": 50, 
    "sort": { 
    "_score": { 
     "order": "desc" 
    } 
    }, 
    "explain": false 
} 

但是,只要我添加過濾器時,AGGS不再返回。我看不出我做錯了什麼,所以任何幫助都會非常感激。

不返回AGGS的一個看起來是這樣的:

{ 
    "query": { 
    "filtered": { 
     "query": { 
     "query_string": { 
      "query": "*wet*", 
      "fields": [ 
      "Name", 
      "Summary", 
      "Description", 
      "Location", 
      "Features", 
      "TypeName", 
      "CategoryName" 
      ] 
     }, 
     "filter": { 
      "term": { 
      "TypeID": "13" 
      } 
     } 
     } 
    } 
    }, 
    "aggs": { 
    "type": { 
     "terms": { 
     "field": "TypeID" 
     } 
    }, 
    "category": { 
     "terms": { 
     "field": "CategoryID" 
     } 
    }, 
    "max_price": { 
     "max": { 
     "field": "Price" 
     } 
    }, 
    "min_price": { 
     "min": { 
     "field": "Price" 
     } 
    }, 
    "filter-type": { 
     "term": { 
     "TypeID": "13" 
     } 
    } 
    }, 
    "from": 0, 
    "size": 50, 
    "sort": { 
    "_score": { 
     "order": "desc" 
    } 
    }, 
    "explain": false 
} 

回答

0

這是filters aggregation正確的語法。你必須爲你已經在你的查詢中使用相同的過濾器來包裝你聚集過濾器內類似這樣的

{ 
    "size": 0, 
    "query": { 
    "filtered": { 
     "query": { 
     "query_string": { 
      "query": "*wet*", 
      "fields": [ 
      "Name", 
      "Summary", 
      "Description", 
      "Location", 
      "Features", 
      "TypeName", 
      "CategoryName" 
      ] 
     } 
     }, 
     "filter": { 
     "term": { 
      "TypeID": "13" 
     } 
     } 
    } 
    }, 
    "aggs": { 
    "filter-type": { 
     "filter": { 
     "term": { 
      "TypeID": "13" 
     } 
     }, 
     "aggs": { 
     "type": { 
      "terms": { 
      "field": "TypeID" 
      } 
     }, 
     "category": { 
      "terms": { 
      "field": "CategoryID" 
      } 
     }, 
     "max_price": { 
      "max": { 
      "field": "Price" 
      } 
     }, 
     "min_price": { 
      "min": { 
      "field": "Price" 
      } 
     } 
     } 
    } 
    } 
} 

在這種情況下filteraggs是多餘的。