The structure of your query is odd. Either it is some format that I am not
aware of or the Elasticsearch parser is not doing a good job at determining
it is invalid.

Your two filters should be joined via a bool filter. Sometime like (not
tested):

{
  "query": {
    "filtered": {
      "query": {
        ....
      },
      "filter": {
        "bool": {
          "must": [
            {
              "geo_distance": {
                "distance": "30km",
                "Location.location": {
                  "lat": "-32.890183",
                  "lon": "-68.844050"
                }
              }
            },
            {
              "not": {
                "filter": {
                  "query": {
                    "terms": {
                      "_all": [
                        "sex",
                        "xxx",
                        "sexshop"
                      ]
                    }
                  }
                }
              }
            }
          ]
        }
      }
    }
  }
}

-- 
Ivan

On Sat, Oct 18, 2014 at 7:04 AM, @mromagnoli <marce.romagn...@gmail.com>
wrote:

> Thanks guys for your responses.
>
> My question was due an strange behavior when using 'not' and
> 'geo_distance' filters.
>
> I want to filter some results that have undesirable words, such as 'sex',
> 'xxx', etc... And then geo filter those good results, but if I place 'not'
> filter first, then when geo filter is applied, it retrieves results with
> that not wanted words in it. If I place geo filter first, and then 'not'
> filter, geo filter seems not to be executed or something, because results
> are not accurate for that filter, instead, they still being good results
> with no bad words.
>
> I am using it like this:
>
>
> {
>     "query": {
>         "filtered": {
>             "query": {...},
>             "filter": [
>                 [{
>                     "geo_distance": {
>                         "distance": "30km",
>                         "Location.location": {
>                             "lat": "-32.890183",
>                             "lon": "-68.844050"
>                         }
>                     }
>                 }],
>                 [{
>                     "not": {
>                         "filter": {
>                             "query": {
>                                 "terms": {
>                                     "_all": ["sex", "xxx", "sexshop"]
>                                 }
>                             }
>                         }
>                     }
>                 }]
>             ]
>         }
>     },
>     "from": 0,
>     "size": "10",
>     "sort": {
>         "_geo_distance": {
>             "Location.location": {
>                 "lat": "-32.890183",
>                 "lon": "-68.844050",
>                 "order": "desc"
>             }
>         },
>         "_score": "desc"
>     }
> }
>
>
> It seems like the last filter is executed correctly.
>
> Thanks,
>
> Marce
>
>
> El jueves, 16 de octubre de 2014 09:16:43 UTC-3, @mromagnoli escribió:
>>
>> Hi everyone,
>> I have a doubt about Filters.
>>
>> If I have more than one filter, in a filtered query, are they executed in
>> the defined order? And, are they filtering in a 'chain' mode, i.e. using
>> the results of the previous filters?
>>
>> Thanks in advance as always.
>>
>  --
> 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 elasticsearch+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/elasticsearch/4ed1e0ad-9654-40a6-a48a-b753c102d0ae%40googlegroups.com
> <https://groups.google.com/d/msgid/elasticsearch/4ed1e0ad-9654-40a6-a48a-b753c102d0ae%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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 elasticsearch+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elasticsearch/CALY%3DcQBZoCpy_nbxVTM9v2%2BR7Y2jmAzGMtsRSZ8J-CVgm_yawQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to