Hello,

Thanks for your reply. What do you mean by "not possible to escape it" ? 
Could you provide a sample code in Java, that would work if the necessary 
changes would be implemented?

Jean-Noel

On Thursday, March 20, 2014 1:51:54 PM UTC+4, Adrien Grand wrote:
>
> Hi,
>
> The aggregation doesn't work because today, when you enter the context of 
> a nested field in an aggregation, it is not possible to escape it. I don't 
> think there is an easy way to modify your data model in order to work 
> around this issue, however this is an issue that we plan to fix in the 
> future (not in the upcoming 1.1 release however, rather in a few months).
>
>
> On Wed, Mar 19, 2014 at 10:00 AM, Jean-Noël Rivasseau 
> <[email protected]<javascript:>
> > wrote:
>
>> Hello,
>>
>> I just started using ElasticSearch 1.0.1. I am trying to find the ideal 
>> data model and query for my exact needs, which I will explain below (I 
>> changed just the terms of the data model corresponding to my real use case, 
>> in order to see if I was able to formulate it differently, which was 
>> useful).
>>
>> I am indexing documents corresponding to BookedStay. A BookedStay has a 
>> nested array (named places) containing map objects corresponding to visited 
>> places during the stay. An object has an id (place id) and a category 
>> corresponding to the time of day of the visited place. A BookedStay then 
>> has a second nested array, corresponding to the amenities used during the 
>> stay. The objects in the array have an id (of type string) and a count.
>>
>> So a BookedStay can be represented as : {"date": 03/03/2014, 
>> "placesVisited": [{"id": 3, "category": "MORNING"}, {"id": 5, 
>> "category":  "AFTERNOON"}, {"id": 7, "category": "EVENING"}], "amenities": 
>> [{"amenityId": "restaurant", "count": 3}, {"amenityId": "dvdPlayer", 
>> "count": 1}] }
>>
>> What I want to run is a query over a given room number, and find for 
>> all BookedStay that have this given place number in their places array, an 
>> aggregate over all amenities used, per time of day.
>>
>> This amounts to finding, for all documents that have a place id of (for 
>> instance) 5, the number of times the restaurant was used, or the dvd player 
>> in the lounge, broken down by time of day. The ultimate goal is to 
>> understand better how the visit of a place in a given time of day affects 
>> the services sold by the hotel.
>>
>> I am unable to achieve this query, as when I run a first nested aggregate 
>> over the category, I cannot nest the second one over the amenities as it is 
>> in the "parent" document. Is it possible to do that? In that case, how do I 
>> specify that the nested aggregation will take place over the parent object 
>> of the current aggregation?
>>
>> Here is a tentative query with the Java driver (obviously not working, 
>> because of the above problem):
>>
>> SearchRequestBuilder srb = 
>> elasticSearchService.getClient().prepareSearch("test_index").setSearchType(SearchType.COUNT).setTypes("test_stay").setQuery(QueryBuilders.nestedQuery("placesVisited",
>>  
>> QueryBuilders.termQuery("id", 5)))
>>  
>> .addAggregation(AggregationBuilders.nested("nestedPlaceVisited").path("placesVisited")
>> .subAggregation(AggregationBuilders.filter("currentPlaceFilter").filter(FilterBuilders.termFilter("id",
>>  
>> 5))
>>  
>> .subAggregation(AggregationBuilders.terms("countPerTimeCategory").field("category")
>> .subAggregation(AggregationBuilders.nested("nestedAmenities").path("amenities")
>>  
>>  // HERE THIS subaggregation should run over the original document... and I 
>> dont know how to achieve that
>>  
>> subAggregation(AggregationBuilders.terms("amenitiesUsed").field("amenities.amenityId"))
>>
>> Thanks for your help over this difficult problem! If it's not possible 
>> with "parent aggregations", how should I refactor my data model?
>>
>> Jean-Noel
>>
>> -- 
>> 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] <javascript:>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/elasticsearch/e8a752fc-0a96-437d-b071-4009c0f39d33%40googlegroups.com<https://groups.google.com/d/msgid/elasticsearch/e8a752fc-0a96-437d-b071-4009c0f39d33%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
>
> -- 
> Adrien Grand
>  

-- 
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/c79aba35-5c3b-4356-bff2-687378fb4261%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to