# Filter order

**URL:** <https://discuss.elastic.co/t/filter-order/26626>\
**Category:** Elasticsearch\
**Created:** [July 31, 2015, 9:02am UTC](https://discuss.elastic.co/t/filter-order/26626 "2015-07-31T09:02:34Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![eprst](https://avatars.discourse-cdn.com/v4/letter/e/a6a055/32.png) [@eprst](https://discuss.elastic.co/u/eprst)\
**Post date:** [July 31, 2015, 9:02am UTC](https://discuss.elastic.co/t/filter-order/26626/1 "2015-07-31T09:02:34Z")

</div>

i found this in documentation "More-specific filters should be placed before less-specific filters in order to exclude as many documents as possible, as early as possible." But in custom language analyzer example we have " "analyzer": {  
"english": {  
"tokenizer": "standard",  
"filter": [  
"english\_possessive\_stemmer",  
"lowercase",  
"english\_stop",  
"english\_keywords",  
"english\_stemmer"  
]  
}  
}", where the stemmer is placed before stopwords and keywords. what is the right way?

---

<div class="post-metadata">

**Author:** ![warkolm](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/warkolm/32/39224_2.png) [@warkolm](https://discuss.elastic.co/u/warkolm)\
**Post date:** [July 31, 2015, 9:03am UTC](https://discuss.elastic.co/t/filter-order/26626/2 "2015-07-31T09:03:17Z")

</div>

A filter is totally different from an analyser though.

---

<div class="post-metadata">

**Author:** ![eprst](https://avatars.discourse-cdn.com/v4/letter/e/a6a055/32.png) [@eprst](https://discuss.elastic.co/u/eprst)\
**Post date:** [July 31, 2015, 9:05am UTC](https://discuss.elastic.co/t/filter-order/26626/3 "2015-07-31T09:05:06Z")

</div>

what is the order of filters in this analyzer?

---

<div class="post-metadata">

**Author:** ![eprst](https://avatars.discourse-cdn.com/v4/letter/e/a6a055/32.png) [@eprst](https://discuss.elastic.co/u/eprst)\
**Post date:** [July 31, 2015, 9:06am UTC](https://discuss.elastic.co/t/filter-order/26626/4 "2015-07-31T09:06:28Z")

</div>

Am i right that keywords filtering should be done before stemming?

---

<div class="post-metadata">

**Author:** ![dantuff](https://avatars.discourse-cdn.com/v4/letter/d/e79b87/32.png) [@dantuff](https://discuss.elastic.co/u/dantuff)\
**Post date:** [July 31, 2015, 10:10am UTC](https://discuss.elastic.co/t/filter-order/26626/5 "2015-07-31T10:10:42Z")

</div>

> [@eprst](#):
>
> More-specific filters should be placed before less-specific filters in order to exclude as many documents as possible, as early as possible.

This is referring to query filters that you send in a search request, not index token filters.

> [@eprst](#):
>
> Am i right that keywords filtering should be done before stemming?

The `english_keywords` filter is used if you want to specify a list of keywords that shouldn't be stemmed (it is empty by default), so the order is correct.

---

<div class="post-metadata">

**Author:** ![eprst](https://avatars.discourse-cdn.com/v4/letter/e/a6a055/32.png) [@eprst](https://discuss.elastic.co/u/eprst)\
**Post date:** [July 31, 2015, 10:53am UTC](https://discuss.elastic.co/t/filter-order/26626/6 "2015-07-31T10:53:21Z")

</div>

What about english\_possessive\_stemmer? it will be done before keywords. Is it normal?

---

<div class="post-metadata">

**Author:** ![eprst](https://avatars.discourse-cdn.com/v4/letter/e/a6a055/32.png) [@eprst](https://discuss.elastic.co/u/eprst)\
**Post date:** [July 31, 2015, 11:00am UTC](https://discuss.elastic.co/t/filter-order/26626/7 "2015-07-31T11:00:08Z")

</div>

BTW what is main difference between indexing filters and query filters, in a nutshell?

---

<div class="post-metadata">

**Author:** ![dantuff](https://avatars.discourse-cdn.com/v4/letter/d/e79b87/32.png) [@dantuff](https://discuss.elastic.co/u/dantuff)\
**Post date:** [July 31, 2015, 11:03am UTC](https://discuss.elastic.co/t/filter-order/26626/8 "2015-07-31T11:03:15Z")

</div>

Yes, it will remove the possession (`'s`) from any nouns, it is very unlikely that keywords would include possessive nouns.

---

<div class="post-metadata">

**Author:** ![eprst](https://avatars.discourse-cdn.com/v4/letter/e/a6a055/32.png) [@eprst](https://discuss.elastic.co/u/eprst)\
**Post date:** [July 31, 2015, 12:50pm UTC](https://discuss.elastic.co/t/filter-order/26626/9 "2015-07-31T12:50:52Z")

</div>

thx, and Should I set "term\_vector":"yes" for the fields which use this analyzer?

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [July 5, 2017, 11:57pm UTC](https://discuss.elastic.co/t/filter-order/26626/10 "2017-07-05T23:57:59Z")

</div>


