Vincular sinônimos dentro do contexto de um filter

Eu consigo organizar melhor os sinônimos dentro de um contexto do filter?
Imagine que tenho uma lista de sinônimos diferentes para blog e para loja, mas ambos estão no mesmo índice.

Ex:
Vincular apenas a lista de sinônimos blog:

"filter": [ 
    {
        "term":  { "type": "blog" }
    }
]

Vincular apenas a lista de sinônimos loja:

"filter": [ 
    {
        "term":  { "type": "loja" }
    }
]

Consigo separar isso sendo que ambos os documentos estão no mesmo índice?
Tem algum jeito melhor?

Oi @lucianocarvalho,

Eu não entendi muito bem sua pergunta mas vou tentar explicar como os sinônimos funcionam na tentativa de te ajudar.

Para utilizar os sinônimos devemos, ao criar um índice, definir um analyzer que possua um filter do tipo synonym. Esse filtro será responsável por mapear todos os sinônimos. Por exemplo:

PUT /teste_sinonimos
{
  "settings": {
    "analysis": {
      "filter": {
        "portuguese_stop": {
          "type": "stop",
          "stopwords": "_portuguese_"
        },
        "portuguese_stemmer": {
          "type": "stemmer",
          "language": "light_portuguese"
        },
        "synonym": {
          "type": "synonym",
          "synonyms": [
            "blog, diário",
            "loja, venda"
          ],
          "updateable": true
        }
      },
      "analyzer": {
        "default_portuguese": {
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "portuguese_stop",
            "portuguese_stemmer"
          ]
        },
        "synonym_portuguese": {
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "portuguese_stop",
            "synonym",
            "portuguese_stemmer"
          ]
        }
      }
    }
  }
}

Repare que eu criei 2 analyzers. O primeiro, default_portuguese, não declara os sinônimos pois vou usá-lo como analyzer de indexação para que os sinônimos não sejam indexados junto com os termos. Já o synonym_portuguese será utilizado como analyzer de consulta que expande os termos considerando os sinônimos, dessa forma podemos atualizá-los mais facilmente sempre que necessário. Essa distinção é feita no mapeamento dos campos. Veja:

POST /teste_sinonimos/_mapping
{
  "properties": {
    "meu_campo": {
      "type": "text",
      "analyzer": "default_portuguese",
      "search_analyzer": "synonym_portuguese"
    }
  }
}

Agora ao indexar um documento que contenha a palavra blog, será possível pesquisá-lo usando a palavra diário:

PUT teste_sinonimos/_doc/1
{
  "meu_campo": "meu blog favorito"
}

GET teste_sinonimos/_search
{
  "query": {
    "match": {
      "meu_campo": "diario"
    }
  }
}

Resultado:

{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 0.2876821,
    "hits" : [
      {
        "_index" : "teste_sinonimos",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.2876821,
        "_source" : {
          "meu_campo" : "meu blog favorito"
        }
      }
    ]
  }
}

Da mesma forma, ao indexar um documento com a palavra loja eu consigo achá-lo usando o termo venda. Os sinônimos não se misturam porque usamos a sintaxe no formato solr.

Eu recomendo a leitura do post The same, but different: Boosting the power of Elasticsearch with synonyms que trás muita coisa interessante sobre sinônimos.

Espero ter ajudado!

Abraço,
Luiz Guilherme