# Filtering documents based on a boolean value

**URL:** <https://discuss.elastic.co/t/filtering-documents-based-on-a-boolean-value/5206>\
**Category:** Elasticsearch\
**Created:** [August 20, 2011, 2:11am UTC](https://discuss.elastic.co/t/filtering-documents-based-on-a-boolean-value/5206 "2011-08-20T02:11:41Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![kikster](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/kikster/32/3117_2.png) [@kikster](https://discuss.elastic.co/u/kikster)\
**Post date:** [August 20, 2011, 2:11am UTC](https://discuss.elastic.co/t/filtering-documents-based-on-a-boolean-value/5206/1 "2011-08-20T02:11:41Z")

</div>

I have been banging my head against the wall for hours to try and  
figure out how to filter a document based on the value of a boolean.  
It seems straight forward, but these queries do not seem to be  
working. Here is the query I'm using:

```
    :query => {
      :filtered => {
        :query => {
          :custom_score => {
            :query => {
              :bool => {
                :should => {
                  :query_string => {
                    :query => "query",
                    :fields => ["field1", "field2"]
                  }
                },
                :must => {
                  :nested => {
                    :path => "path", :query => {
                      :flt => {
                        :fields => ["field3"], :like_text =>

```

"query"  
}  
}  
}  
}  
}  
},  
:script =\> "\_score \* doc['admin\_score'].value"  
}  
},  
:filter =\> {  
:bool =\> {  
:must\_not =\> {  
:term =\> {  
:show =\> 0  
}  
}  
}  
}  
}  
},  
:size =\> 20

I convert this syntax into JSON before sending. I only want to return  
results where object.show == true, but documents where show == false  
are getting through the filter. Here's what the mapping for the  
"show" field:

"show":{"type":"boolean"}

What am I doing wrong???

---

<div class="post-metadata">

**Author:** ![kikster](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/kikster/32/3117_2.png) [@kikster](https://discuss.elastic.co/u/kikster)\
**Post date:** [August 20, 2011, 2:29am UTC](https://discuss.elastic.co/t/filtering-documents-based-on-a-boolean-value/5206/2 "2011-08-20T02:29:54Z")

</div>

And here's a gist of the above query hash...

> <https://gist.github.com/cdolivares/1158523>

---

<div class="post-metadata">

**Author:** ![kikster](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/kikster/32/3117_2.png) [@kikster](https://discuss.elastic.co/u/kikster)\
**Post date:** [August 20, 2011, 2:35am UTC](https://discuss.elastic.co/t/filtering-documents-based-on-a-boolean-value/5206/3 "2011-08-20T02:35:10Z")

</div>

Here's a gist of the above query: [https://gist.github.com/1158523](https://gist.github.com/1158523)

Note: I'm using ruby and use MultiJson.encode to convert the above  
hash into JSON

---

<div class="post-metadata">

**Author:** ![kikster](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/kikster/32/3117_2.png) [@kikster](https://discuss.elastic.co/u/kikster)\
**Post date:** [August 20, 2011, 6:22am UTC](https://discuss.elastic.co/t/filtering-documents-based-on-a-boolean-value/5206/4 "2011-08-20T06:22:04Z")

</div>

Ok so I figured it out, turns out wrapping a filter inside a bool  
yields the wrong functionality and simply putting the term clause  
works...learning the hard way ftw.

On Aug 19, 7:35 pm, Chris [christopherdavidoliva...@gmail.com](mailto:christopherdavidoliva...@gmail.com) wrote:

> Here's a gist of the above query: [1158523’s gists · GitHub](https://gist.github.com/1158523)
> 
> Note: I'm using ruby and use MultiJson.encode to convert the above  
> hash into JSON

---

<div class="post-metadata">

**Author:** ![Clinton\_Gormley](https://avatars.discourse-cdn.com/v4/letter/c/50afbb/32.png) [@Clinton\_Gormley](https://discuss.elastic.co/u/Clinton_Gormley)\
**Post date:** [August 20, 2011, 10:23am UTC](https://discuss.elastic.co/t/filtering-documents-based-on-a-boolean-value/5206/5 "2011-08-20T10:23:11Z")

</div>

Hi Chris

On Fri, 2011-08-19 at 23:22 -0700, Chris wrote:

> Ok so I figured it out, turns out wrapping a filter inside a bool  
> yields the wrong functionality and simply putting the term clause  
> works...learning the hard way ftw.

Filters don't use the 'bool' QUERY. Instead, they can be combined with  
and,or,not FILTERs.

So you could rewrite your filter as:

:filter =\> {  
:not =\> { :term =\> { :show =\> 0 }}  
}

clint

---

<div class="post-metadata">

**Author:** ![kikster](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/kikster/32/3117_2.png) [@kikster](https://discuss.elastic.co/u/kikster)\
**Post date:** [September 11, 2011, 1:09am UTC](https://discuss.elastic.co/t/filtering-documents-based-on-a-boolean-value/5206/6 "2011-09-11T01:09:22Z")

</div>

I implemented this change, but now it appears documents are not being filtered properly. Documents where show == false are still getting through.

Here's the query.

> <https://gist.github.com/cdolivares/1158523>

This has been a persistent problem that I'm not sure how to fix.

---

<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 6, 2017, 3:54am UTC](https://discuss.elastic.co/t/filtering-documents-based-on-a-boolean-value/5206/7 "2017-07-06T03:54:53Z")

</div>


