2016-06-27 1 views
1

나는 ElasticSearch 쿼리를 사용하여 모든 제품을 설정된 범위 내에서 가져옵니다. "제품"이라는 특성을 가진 문서 만 선택하는 필터를 추가하고 싶습니다. 반드시 존재해야만하는 테스트에는 항상 오류가있었습니다. 필터를 존재범위가 있고 존재 필터가있는 탄성 검색

POST /zipcodes_at/zipcode/_search 
{ 
    "_source": [ 
    "products" 
    ], 
    "query": { 
    "bool": { 
     "filter": [ 
     { 
      "exists": { 
      "field": "products" 
      } 
     }, 
     { 
      "geo_distance": { 
      "distance": "100km", 
      "location": { 
       "lat": 48.232361, 
       "lon": 16.324659 
      } 
      } 
     } 
     ] 
    } 
    }, 
    "sort": [ 
    { 
     "_geo_distance": { 
     "location": { 
      "lat": 48.232361, 
      "lon": 16.324695 
     }, 
     "order": "asc", 
     "unit": "km", 
     "distance_type": "plane" 
     } 
    } 
    ] 
} 
+0

'필수/존재 '로 시도한 쿼리를 추가 할 수 있습니까? – Val

+0

오, 나는 그들을 구하지 못했다. 항상 구문 오류가 있었고 완전히 틀렸다고 생각합니다. – exe

+0

어떤 ES 버전을 사용하고 있습니까? – Val

답변

3

이보십시오.

{ 
    "_source": ["products"], 
    "query": { 
     "filtered": { 
      "filter": { 
       "bool": { 
        "must": [{ 
         "exists": { 
          "field": "products" 
         } 
        }, { 
         "geo_distance_range": { 
          "from": 0, 
          "to": 100, 
          "distance_unit": "km", 
          "location": { 
           "lat": 40.73, 
           "lon": -74.1 
          } 
         } 
        }] 
       } 
      } 
     } 
    }, 
    "sort": [{ 
     "_geo_distance": { 
      "location": { 
       "lat": 48.232361, 
       "lon": 16.324695 

      }, 
      "order": "asc", 
      "unit": "km", 
      "distance_type": "plane" 
     } 
    }] 
} 
+0

고맙습니다. – exe

1

당신은 부울 필터를 사용해야한다,와 함께 지리적 거리 필터를 결합 :

/zipcodes_at/zipcode/_search 

{ 
    "_source": [ 
    "products" 
    ], 
    "filter": { 
    "geo_distance": { 
     "distance": "100km", 
     "location": { 
     "lat": 48.232361, 
     "lon": 16.324659 
     } 
    } 
    }, 
    "sort": [ 
    { 
     "_geo_distance": { 
     "location": { 
      "lat": 48.232361, 
      "lon": 16.324695 

     }, 
     "order": "asc", 
     "unit": "km", 
     "distance_type": "plane" 
     } 
    } 
    ] 
} 
+0

ES 2.x에서는 ['filtered/filter'가 더 이상 사용되지 않습니다.] (https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking_20_query_dsl_changes.html#_literal_filtered_literal_query_and_literal_query_literal_filter_deprecated) 부울/필터'대신. k. – Val

+0

k. 나는 여전히 업그레이드를 계획하고있는 프로덕션 환경에서 1.7.2를 실행 중입니다. 가리키는 것에 감사드립니다. 업그레이드하기 전에 릴리스 노트를 살펴 보겠습니다. – user3775217