Facet search / autocomplete

We're using ElasticSearch to (approximately) search a product database of
approximately 500k products which come from a wide variety of categories
and have a highly varied set of properties. To support our use cases, we'd
like to allow users to search against (and apply as filters) the attributes
of the products. For example, a user might type in 'band' and we'd propose
the filters "Category: Band Saws" and "Brand:
Band-Aids". http://www.homedepot.com/ provides an example of what we're
looking to do.

We have things working with the approach described below, but we're running
into performance and memory issues and I was hoping someone might have an
alternate approach (either with 0.20 or an upcoming release) that would
simplify things enough to get significantly better performance from the

Currently we use a structure where products have nested attributes, and
each nested attribute contains a name and value property, each of which has
an id (to map back to the database), a name (for searching against), and a
facetValue we use for faceting across all attributes and attribute values.
This allows us to do a few things:

  • Faceting across all attributes in the system while maintaining enough
    information to apply any selections as a filter
  • Typeahead search (using match_phrase_prefix) of attribute names and
    values in the user's current context (e.g. don't show "Material: Stainless
    Steel" for a 'stai' search if a user has already filtered by "Category:

Here's a gist of a simplified version of our mapping in case it helps make
things clearer: https://gist.github.com/jredburn/7ac1064703f22306bf49

If anyone has any ideas about alternate approaches that would align better
with traditional usages of ElasticSearch while still delivering the
experience, would very much appreciate. And if anyone is struggling with
the same thing, also happy to explain the current approach in more detail.
Let me know!

  • Jeremy

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.
For more options, visit https://groups.google.com/groups/opt_out.

Hi Jeremy,

how do you do the automatic facetting of the dynamic set of attributes?
Maybe you could help me with my issue? I've also posted it on Stackoverflow: