Schema Design Question

I'm doing research for deploying elasticsearch for production. This is
really new to me, but I couldn't find much in google.

We need to search sales in elasticsearch.

  • Sale has bunch of payments, products, and 1 user.
  • Sale has huge amount of data per day.
  • Product object in sale might get updated few times a day, such field like
    name, price..etc.

Sale: { // very high write
payments: {
payment: {
payment_type: "visa"
products: {
product: { // this will get update few time per day
id: 12345,
name: "yellow jacket",
user: { // this will change once a while
id: 111,
firstname: "kevin",

What is the best way to design this for fast search? I read that there are
three ways of doing so:

  1. have everything you need in a document, but you'll have to update all
    the document if anything changes.
  2. have only searchable terms in the document. do second query if you need
    more detail information.
  3. have only entity id in the inner objects. very small amount of update is
    needed since foreign key id don't really change much, but still have to do
    two query each time to get detail information.

I understand this is largely depends on the usage and environments, but is
there some kind of best practice for Sale indexes ? I couldn't find any
real world elasticsearch schema that I can reference. I really want to see
how other people do it. I'm sure this problem been solve before.

Can someone please give me their thoughts on this?

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
To view this discussion on the web visit
For more options, visit