A friend of mine made it work. It wasn't working because we were using a 
filter -> term inside the nested aggregation with "Tuberculosis", but the 
analyzed value was "tuberculosis". Changing "Tuberculosis" to 
"tuberculosis" made it work. Also, repeating the first query (instead of 
using a filter) makes it work in the nested filter.

Here's one example:

curl -XPOST "http://localhost:9200/test_results/_search?pretty=true"; -d'{
  "size": 0,
  "query": {
    "nested": {
      "path": "data",
      "query": {
        "match": {
          "data.condition": "Tuberculosis"
        }
      }
    }
  },
  "aggregations": {
    "data": {
      "nested": {
        "path": "data"
      },
      "aggregations": {
        "filtered_result": {
          "filter": {
            "query": {
              "match": {
                "condition": "Tuberculosis"
              }
            }
          },
          "aggregations" : {
            "result": {
              "terms": {
                "field": "data.result"
              }
            }
          }
        }
      }
    }
  }
}
'

  

On Friday, May 9, 2014 2:48:50 PM UTC-3, Ary Borenszweig wrote:
>
> Hi,
>
> I have an index where I need to store medical test results. A test result 
> can talk about many conditions and their results: for example, Tuberculosis 
> => positive, Flu => negative. So I modeled my index like this:
>
> curl -XPUT "http://localhost:9200/test_results/"; -d'
> {
>    "mappings": {
>       "result": {
>          "properties": {
>             "data": {
>               "type": "nested",
>               "properties": {
>                 "condition": {"type": "string"},
>                 "result": {"type": "string"}
>               }
>             }
>          }
>       }
>    }
> }'
>
> I insert one test result with Tuberculosis => positive, Flu => negative:
>
> curl -XPOST "http://localhost:9200/test_results/_bulk"; -d'
> {"index":{"_index":"test_results","_type":"result"}}
> {"data": [{"condition": "Tuberculosis", "result": "positive"}, 
> {"condition": "FLU", "result": "negative"}]}
> '
>
> Then, one of the queries I need to do is this one: for Tuberculosis, give 
> me how many positives you have and how many negatives you have (basically: 
> filter by data.condition and group by data.result). So I tried this query:
>
> curl -XPOST "http://localhost:9200/test_results/_search?pretty=true"; -d'{
>   "size": 0,
>   "query": {
>     "nested": {
>       "path": "data",
>       "query": {
>         "match": {
>           "data.condition": "Tuberculosis"
>         }
>       }
>     }
>   },
>   "aggregations": {
>     "data": {
>       "nested": {
>         "path": "data"
>       },
>       "aggregations": {
>         "result": {
>           "terms": {
>             "field": "data.result"
>           }
>         }
>       }
>     }
>   }
> }
> '
>
> However, the above gives me this result:
>
>  "aggregations" : {
>     "data" : {
>       "doc_count" : 2,
>       "result" : {
>         "buckets" : [ {
>           "key" : "negative",
>           "doc_count" : 1
>         }, {
>           "key" : "positive",
>           "doc_count" : 1
>         } ]
>       }
>     }
>   }
>
> That is, it gives me one negative result and one positive result. That's 
> because the document has one positive and negative, and it's not discarding 
> the one that has "Flu".
>
> I see in the documentation there's a "filter" aggregate. I tried using it 
> in many ways:
>
> 1. With term on "data.condition":
>
> curl -XPOST "http://localhost:9200/test_results/_search?pretty=true"; -d'{
>   "size": 0,
>   "query": {
>     "nested": {
>       "path": "data",
>       "query": {
>         "match": {
>           "data.condition": "Tuberculosis"
>         }
>       }
>     }
>   },
>   "aggregations": {
>     "data": {
>       "nested": {
>         "path": "data"
>       },
>       "aggregations": {
>         "filtered_result": {
>           "filter": {
>             "term": { "data.condition" : "Tuberculosis" }
>           },
>           "aggregations" : {
>             "result": {
>               "terms": {
>                 "field": "data.result"
>               }
>             }
>           }
>         }
>       }
>     }
>   }
> }
> '
>
>
> 2. With term on "condition":
>
> curl -XPOST "http://localhost:9200/test_results/_search?pretty=true"; -d'{
>   "size": 0,
>   "query": {
>     "nested": {
>       "path": "data",
>       "query": {
>         "match": {
>           "data.condition": "Tuberculosis"
>         }
>       }
>     }
>   },
>   "aggregations": {
>     "data": {
>       "nested": {
>         "path": "data"
>       },
>       "aggregations": {
>         "filtered_result": {
>           "filter": {
>             "term": { "condition" : "Tuberculosis" }
>           },
>           "aggregations" : {
>             "result": {
>               "terms": {
>                 "field": "data.result"
>               }
>             }
>           }
>         }
>       }
>     }
>   }
> }
> '
>
> 3. With nested:
>
> curl -XPOST "http://localhost:9200/test_results/_search?pretty=true"; -d'{
>   "size": 0,
>   "query": {
>     "nested": {
>       "path": "data",
>       "query": {
>         "match": {
>           "data.condition": "Tuberculosis"
>         }
>       }
>     }
>   },
>   "aggregations": {
>     "data": {
>       "nested": {
>         "path": "data"
>       },
>       "aggregations": {
>         "filtered_result": {
>           "filter": {
>             "nested": {
>               "path": "data",
>               "filter": {
>                 "term": { "data.condition": "Tuberculosis" }
>               }
>             }
>           },
>           "aggregations" : {
>             "result": {
>               "terms": {
>                 "field": "data.result"
>               }
>             }
>           }
>         }
>       }
>     }
>   }
> }
> '
>
> but no luck: all of the above queries just give me:
>
> "aggregations" : {
>     "data" : {
>       "doc_count" : 2,
>       "filtered_result" : {
>         "doc_count" : 0,
>         "result" : {
>           "buckets" : [ ]
>         }
>       }
>     }
>   }
>
> Is there a way to do what I want?
>
> Thanks,
> Ary
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elasticsearch/19846a1d-ea82-4097-859c-696591df1558%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to