# Query and multiple filters

**URL:** https://discuss.elastic.co/t/query-and-multiple-filters/42263
**Category:** Elasticsearch
**Created:** [February 19, 2016, 4:37pm UTC](https://discuss.elastic.co/t/query-and-multiple-filters/42263 "2016-02-19T16:37:32Z")
**Posts on this page:** 9
**Page:** 1

<div class="post-metadata">

### Author: ![Frederic\_Houbie](https://avatars.discourse-cdn.com/v4/letter/f/a9a28c/32.png) [@Frederic\_Houbie](https://discuss.elastic.co/u/Frederic_Houbie)
#### Post date: [February 19, 2016, 4:37pm UTC](https://discuss.elastic.co/t/query-and-multiple-filters/42263/1 "2016-02-19T16:37:33Z")

</div>

Hello, I'm afraid the question has already been asked before, but I could not find exactly the answer.

I'm indexing documents with this mapping:

- id
- title
- content
- product
- category

I would like to do a query with :

1. filter on  
product in ('prodA','prodB') and category in ('catA', 'catB')
2. query on  
content : 'interesting text to find'

I've seen that I need a query and a filter, but can't find how to use both in the same search. Could someone clarify me that ?

Thanks

Frédéric

---

<div class="post-metadata">

### Author: ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)
#### Post date: [February 19, 2016, 4:59pm UTC](https://discuss.elastic.co/t/query-and-multiple-filters/42263/2 "2016-02-19T16:59:30Z")

</div>

Use a Bool query. It has a must clause and a filter clause.

---

<div class="post-metadata">

### Author: ![Frederic\_Houbie](https://avatars.discourse-cdn.com/v4/letter/f/a9a28c/32.png) [@Frederic\_Houbie](https://discuss.elastic.co/u/Frederic_Houbie)
#### Post date: [February 22, 2016, 4:24pm UTC](https://discuss.elastic.co/t/query-and-multiple-filters/42263/3 "2016-02-22T16:24:13Z")

</div>

Hi David,

thanks. I've tried this query

{  
"query":{  
"bool" : {  
"must" : {  
"term" : { "content" : "latitude" }  
},  
"filter": [{  
"terms" : { "product" : ["prodA";"prodB"]},  
"terms" : { "categories" : ["guide"]}  
}]  
}  
}  
}

What I expect is to have a query more or less like :

select \* from type  
where categories in ('guide') and product in ("prodA","prodB") and content  
like %latitude%

It seems I'm wrong somewhere as I get results where product are equal to  
prodC.

Any advice where I'm wrong ?

Thanks

Frédéric

---

<div class="post-metadata">

### Author: ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)
#### Post date: [February 22, 2016, 4:43pm UTC](https://discuss.elastic.co/t/query-and-multiple-filters/42263/4 "2016-02-22T16:43:12Z")

</div>

Be careful with your analyzers. They will play a big role here.

For example, if you could reproduce with a full SENSE script that would be easier to help you fixing your problem.

For example, `prodA` might have been indexed as `prodb`. So the Term query you use won't match.

About the content part, are you looking for full terms or do you also want to search for `%atitu%`?

---

<div class="post-metadata">

### Author: ![Frederic\_Houbie](https://avatars.discourse-cdn.com/v4/letter/f/a9a28c/32.png) [@Frederic\_Houbie](https://discuss.elastic.co/u/Frederic_Houbie)
#### Post date: [February 22, 2016, 8:39pm UTC](https://discuss.elastic.co/t/query-and-multiple-filters/42263/5 "2016-02-22T20:39:58Z")

</div>

Hi,  
prodA was an example, product names are more different. I'll check for  
analyzers. For content, it is more a full text search %latitude%.

What do you mean by SENSE ?

Thanks

Frédéric

---

<div class="post-metadata">

### Author: ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)
#### Post date: [February 22, 2016, 9:54pm UTC](https://discuss.elastic.co/t/query-and-multiple-filters/42263/6 "2016-02-22T21:54:46Z")

</div>

> [@Frederic\_Houbie](#):
>
> Hi,  
> prodA was an example, product names are more different. I'll check for  
> analyzers. For content, it is more a full text search %latitude%.

I guessed so. But still you can have issues with analyzers here.

> [@Frederic\_Houbie](#):
>
> What do you mean by SENSE ?

> **[Sense Documentation | Elastic](https://www.elastic.co/guide/en/sense/master/index.html)**

Also look at: [https://www.elastic.co/help/](https://www.elastic.co/help/)

---

<div class="post-metadata">

### Author: ![Frederic\_Houbie](https://avatars.discourse-cdn.com/v4/letter/f/a9a28c/32.png) [@Frederic\_Houbie](https://discuss.elastic.co/u/Frederic_Houbie)
#### Post date: [February 28, 2016, 10:12pm UTC](https://discuss.elastic.co/t/query-and-multiple-filters/42263/7 "2016-02-28T22:12:45Z")

</div>

David,

thanks,  
I've installed Sense, nice apps. I've created a manual mapping with no  
analyzers for the fields I want to filter on. Then, I've tries to create a  
query. I'm there :  
GET \_search  
{  
"query": {  
"bool": {  
"must": {  
"multi\_match": {  
"query": "decoding aixm metadata",  
"fields": [  
"title^3",  
"content"  
]  
}  
},  
"filter": [  
{  
"terms": {  
"categories": [  
"Guide",  
"API"  
]  
}  
}  
]  
}  
}  
}

My question is now, where should I add a second filter on another field ?

Thanks

Frédéric

---

<div class="post-metadata">

### Author: ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)
#### Post date: [February 29, 2016, 2:33am UTC](https://discuss.elastic.co/t/query-and-multiple-filters/42263/8 "2016-02-29T02:33:34Z")

</div>

filter is an array. Add a new filter in it.

---

<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:13pm UTC](https://discuss.elastic.co/t/query-and-multiple-filters/42263/9 "2017-07-05T23:13:00Z")

</div>


