Filtered alias with a _default_ mapping?

I have an index that will end up containing a few hundred types. I'm
dynamically creating these types based on some app logic. Each one can have
a different mapping, but they have some similarities.

One of these similarities is that all the documents across all the types
can be soft-deleted. Soft deleted documents are still indexed for some
administration purposes, but I don't want them to appear in search results.
So I tried creating a filtered alias.

First the mapping sets up the deleted field mapping, using default:

"mappings": {
"default": {
"properties": {
"deleted": {
"type": "boolean"

Then, I create the alias right after creating the index, like so:

POST /_aliases
"actions": [
"add": {
"index": "myindex_v1",
"alias": "myindex",
"filter": { "term": { "deleted": false } }

But, when searching by this alias, no documents are ever matched. It's not
a problem with the search, because changing it to use the actual index name
works fine. I only get 0 results when using the index alias name. If I
recreate the alias with a remove/add alias post after I've indexed
documents into it, it starts working.

I suspected the default mapping wasn't working with the alias filter. I
though maybe it works if I recreate it after the documents are indexed
because the real type mapping was dynamically generated by that time. So
just to try it out, I hard coded my type mapping to a specific type,
instead of default, and sure enough, that works.

So, am I correct that a default mapping is not sufficient to make a
filtered alias work? Is there a better way to achieve the requirement of
always filtering out soft-deleted documents from search results without
having to tag on filter criteria to every search?


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