I've been working on advanced parametric search with elasticsearch v1.1 and
am having trouble getting aggregations to work in the way I'd like. I've
scoured the documentation and tried a couple different approaches without
luck, so I'm hoping someone on this list can help.
I have an index, "parts", and each indexed item has properties that I'd
like to use for parametric search, along with some text fields that I'll
allow the user to query.
On the frontend, I'd like to present the user with a search query input,
but also a number of parametric filtering options...here's how that looks
with only category filtering applied:
The challenges arise once I want to select a parametric filter, e.g.:
Here, I've checked "0.14" under "Weights". Notice that the other options
for weights have disappeared. This is of course because ES is only
aggregating the weights in the result set, and the only value in the result
set is "0.14". For the user, this is no good because they should be able
to select other weight values. On the backend, I'm including the weight
condition in my query:
So I took another approach, and put the weight condition in the filters,
rather than the query, so it wouldn't affect aggregations. Here's how the
backend settings look now:
And here's the frontend result:
The good news is that now I can see the sibling choices for my weight
filters, along with accurate counts of how selecting a sibling option would
affect the query results. The problem is that, because the weight
condition is not considered in aggregations, the aggregation numbers are
off for all of the non-weight parametric options. For example, the
"Material" option has an aggregate count of 5 results...but selecting it
would actually decrease the results to 0.
Does anyone know of a good solution for this? It seems fundamental to a
lot of parametric search solutions, so I'm hoping there's an answer. The
only route I can see now seems really expensive and messy: for each
aggregation, I need to apply all of the query conditions in the aggregation
filters...for example:
--
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/19d42213-000a-4033-ac71-90d25ee1bd0c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.