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=emailutm_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.