我Elasticsearch 1.7.2
4天的經歷。
設置
我的文檔的集合,每個文檔是一個User
。 User
有多個Answers
,它通過UserAnswers
連接。其中給出了user_answers.answer[]
的文檔參考。 answers
數組是一個對象數組。
user_answers.answer[].correct
是一個布爾字段,告訴我用戶給出的答案是否正確。
目的
我想列出的用戶,也顯示他們有正確和不正確的答案的總數。
方法
到目前爲止,我已經嘗試了許多不同的方法和我在試圖1.5天這麼遠的一個,我會在這裏包括是接近。
- 使用
terms
聚合通過用戶名爲每個User
創建一個存儲桶。 - 篩選每個存儲桶只留下正確或不正確的答案。
- 計算篩選答案的數量。
查詢
{
"size": 0,
"filter": {
"bool": {
"must_not": {
// Remove users who already have this award
"term": {"awards_users.award_id": 2}
}
}
},
"aggs": {
"users": {
"terms": {"field": "username"},
"aggs": {
"correct": {
"filter": {
"term": {"user_answers.answer.correct": true}
},
"aggs": {
"count": {
"value_count": {
"field": "user_answers.answer.id"
}
}
}
},
// Same for incorrect, but inverted correct value
}
}
}
}
樣本響應
{
"key": "neon1024",
"doc_count": 1,
"correct": {
"doc_count": 1,
"count": {
"value": 7 // Expected 1 correct & 6 incorrect
}
}
},
這是我對測試記錄,我期待的是1
返回,而不是7
。共有7個答案,6個不正確和1個正確答案。這我已在我的文檔索引中進行過驗證。
問題
出於某種原因,實際的過濾器似乎被忽略,而留在桶中的所有可能的相關答案。因此,聚合看到他們全部,而不是顯示預期的價值。
問題
我如何使用聚合基於相關答案值的值,以隔離我計數?
感謝您閱讀我的長問題!
映射中'user_answers.answer'是一個嵌套對象嗎?如果不是,那可能是問題。嘗試並使其嵌套並使查詢和聚合適應使用'nested',它應該在事後工作。 – Val