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:
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 elasticsearch+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/4f5e09b3-9008-4727-af1d-6f05541cd943%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.