2016-06-27 16 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

'must/exists'で試したクエリを追加できますか? – 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) bool/filter'を実行します。 k。 – Val

+0

k。私はまだ1.7.2を稼働しており、すぐにアップグレードを計画しています。指差してくれてありがとう、アップグレードする前にリリースノートを調べます。 – user3775217

関連する問題