2013-09-20 6 views
2

Я хотел бы, чтобы фильтровать { "query" : { "match_all" :{}}} на elasticsearch, но я не понять это ...Elasticsearch: не может фильтровать по нескольким полям

Вот что я посылаю ES _search метод.

curl -XGET http://localhost:9200/users/location/_search '-H Accept: application/json' '-H Content-Type: application/json' 
-d '{ 
    "query":{ 
     "match_all":{} 
    }, 
    "filter":{ 
     "and":{ 
     "geo_distance":{ 
      "distance":"500km", 
      "location":{ 
       "lat":48.8, 
       "lon":2.33 
      } 
     }, 
     "term":{ 
      "status":1 
     } 
     } 
    }, 
    "sort":[ 
     { 
     "_geo_distance":{ 
      "location":[ 
       2.33, 
       48.8 
      ], 
      "order":"asc", 
      "unit":"km" 
     } 
     } 
    ] 
}' 

Но я всегда получаю эту ошибку:

nested: QueryParsingException[[users] [and] filter does not support [distance]] 

И если я удалю "and" :{} вариант и только фильтр geo_distance, это работает ... Любая помощь будет фантастическим.

Приветствия

+0

Просто измените 'and' часть в массив. Что-то вроде этого 'и: [{distance: {...}}, {term: {...}}]' – ramseykhalaf

+0

Зачем вам нужно фильтровать запрос 'match_all'? Все, что он делает, - это вернуть все документы под областью определения индекса пользователя/документа. –

ответ

6

Я думаю, что ваш and фильтр неправильно написано. Ошибка указывает, что фильтр and имеет проблемы с его параметрами, более или менее. См http://www.elasticsearch.org/guide/reference/query-dsl/and-filter/

Попробуйте вместо этого:

{ 
    "query":{ 
     "match_all":{} 
    }, 
    "filter":{ 
     "and": [ 
     { 
      "geo_distance": { 
       "distance":"500km", 
       "location":{ 
        "lat":48.8, 
        "lon":2.33 
       } 
      } 
     }, { 
      "term": { 
       "status":1 
      } 
     }] 
     } 
    }, 
    "sort":[ 
     { 
     "_geo_distance":{ 
      "location":[ 
       2.33, 
       48.8 
      ], 
      "order":"asc", 
      "unit":"km" 
     } 
     } 
    ] 
} 
Смежные вопросы