Thanks, that did the trick :) Radim
Dne pondělí 26. ledna 2015 10:02:24 UTC+1 David Pilato napsal(a): > > Can you use a filter agg? > http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filter-aggregation.html > > David > > Le 26 janv. 2015 à 09:46, Radim Novotny <novotn...@gmail.com <javascript:>> > a écrit : > > Hi, > > I'm using ES 1.4.2 to search across 4 slightly different types in a single > index. The following example is simplified version with only two types > "profile" and "publication". Profiles can have related publications, > publications can have related profiles. > > I want to do a full text search (single search field) across all content > indexed in an index, preferring most related ones, of course, but > increasing score if profile has a lot of publications (so it is > important person, because is very active and should be preferred > in search results). > I want to display the search results grouped by _type (see by_type > aggregation) so I'm using terms aggregation and top_hits sub aggregation > with optional pagination (from, size). I want to show how many results is > in every department (people and publications always belongs to a single > department) > > This works quite good. I can display aggregation by department for > example: Department 1 (100 results), Department 2 (50 results) and I can > group results by type: Profiles (60) Publications (90) and display for > example 10 top hits for every type. That's perfect. > > Now it comes to filtering. For example (simple case) I want to filter only > results from Department 1. I can do that quite easily using the filtered > query, but when I do that, The result is: > > Department 1 (100 results), Department 2 (0 results) > > Ok, that's wrong. Let's use post_filter... The problem is, post filter > written this way: > { > "size": 10, > "query": { > .... > }, > "post_filter": { > "and": [ > {"match_all": {}} > ] > }, > "aggs": { > ... > } > } > > is not applied as it does not filter top_hits results but the "global" > results. post_filter is not supported by top_hits aggregation. > > My use case is a bit more complicated. I want to filter by > publication_type, for example (in this case only Publications will be in > result set, of course), but I still want to display number of results in > unfiltered (but queried) set. Like: "If you tick this checkbox, you will > get another 50 results to the same query". > > Hope my problem is clearly described. > > Finally my question: > Is there any way how to solve this situation? How to apply a post_filter > to top_hits? If I remove top_hits aggregation and aggregate in client it > might easily come out there will be > 1 profile displayed and 9 publications (if size would be set to 10). I > want to display 10 profiles and 10 publications with a pagination. > Maybe I'm doing it wrong and there is a better way how to achieve my > requirements. > > Example index setup, example data and my query: > https://gist.github.com/naro/3ad9a1c85f03c631e02a > > Thanks, > Radim > > > -- > 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 elasticsearc...@googlegroups.com <javascript:>. > To view this discussion on the web visit > https://groups.google.com/d/msgid/elasticsearch/4f5e09b3-9008-4727-af1d-6f05541cd943%40googlegroups.com > > <https://groups.google.com/d/msgid/elasticsearch/4f5e09b3-9008-4727-af1d-6f05541cd943%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > > -- 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 elasticsearch+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/e65d73de-c7a5-40e5-8355-aef108b87b32%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.