2015-12-26 31 views
1

我有一些數據,我試圖獲得所有具有特定月份且距目標點小於1.6km的結果。我正在使用PHP客戶端,所以我的查詢看起來像這樣。在同一個必須過濾器中不能有一個術語和geo_distance_range

$crimeSearch = [ 
      'size' => 0, 
      'query' => [ 
       'filtered' => [ 
        'filter' => [ 
         'bool' => [ 
          'must' => [ 
           'term' => [ 
            'month' => $date, 
           ], 
           'geo_distance_range' => [ 
            'location' => [ 
             'lat' => $lat, 
             'lon' => $lng, 
            ], 
            'lt' => '1.6km', 
           ], 

          ], 
         ], 
        ], 
       ], 
      ], 
      'aggs' => [ 
       'group_by_category' => [ 
        'terms' => [ 
         'field' => 'category', 
        ], 
       ], 
      ], 
     ]; 

我目前看到以下錯誤:

query_parsing_exception: No query registered for [location] 

我的映射是這樣的:

"properties": { 
     "location": { 
      "type": "geo_point" 
     }, 
     "category": { 
      "type": "string", 
      "index": "not_analyzed" 
     }, 
     "month": { 
      "type": "string", 
      "index": "not_analyzed" 
     } 
     } 

現在,如果我註釋掉無論是長期價值或者從該geo_distance_range值必須數組,然後我得到正確的結果。只有當它們都存在時,纔會出現此錯誤。

任何人都可以看到我的錯誤與我的查詢?

我已經嘗試將geo_distance_range移動到它自己的必須塊中,但是這似乎會帶回所有匹配必須過濾器而不是它們兩者的結果。

如果您需要更多信息,請詢問!

謝謝。

+0

你正在使用什麼版本的ES? – ChintanShah25

+0

我正在使用版本2.0.0。現在解決了。我只需要將我的每個必須過濾器都包裝在他們自己的數組中。不管怎麼說,還是要謝謝你。 –

回答

1

我不知道任何關於PHP,但如果我嘗試轉換等效ES json query那麼這可能工作。我猜你需要把每must clause陣這樣

[ 
    'size' => 0, 
    'query' => [ 
     'filtered' => [ 
      'filter' => [ 
       'bool' => [ 
        'must' => [ 
         [ 
          'term' => [ 
           'month' => $date, 
          ] 
         ], 
         [ 
          'geo_distance_range' => [ 
           'location' => [ 
            'lat' => $lat, 
            'lon' => $lng, 
           ], 
           'lt' => '1.6km', 
          ], 
         ], 
        ], 
       ], 
      ], 
     ], 
    ], 
    'aggs' => [ 
     'group_by_category' => [ 
      'terms' => [ 
       'field' => 'category', 
      ], 
     ], 
    ], 
]; 

這相當於

{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "bool": { 
      "must": [ 
      { 
       "term": { 
       "month": "June" 
       } 
      }, 
      { 
       "geo_distance_range": { 
       "lt": "1.6km", 
       "location": { 
        "lat": 37.9174, 
        "lon": -122.305 
       } 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 

工作的呢?

+0

是的,完美的工作。謝謝。 –

相關問題